2022년 2월 16일 수요일

[ Docker ] wsl을 통한 메모리 관리

 

windows에서 docker사용 시 .wslconfig file을 통해 docker메모리를 관리한다.


C:\Users\{Name} 경로에 .wslconfig 파일을 생성 후 내용 추가

[wsl2]

memory=4GB

swap=0

 

power shell에서 해당 서비스 재시작 후 

Restart-Service LxssManager


변경 사항 확인

ubuntu shell : free -h












2022년 2월 1일 화요일

[ Docker ] 이미지 다운로드시, 도커 기본 저장경로 변경

Windows Docker사용시 

default로 C:디스크의 C:\Users\My\AppData\Local\Docker\wsl에 

도커이미지가 저장된다. 

여러 이미지를 다운로드시 저장공간이 커지므로 

파티션된 다른 디스크로 docker path를 설정한다.


# 사용하는 docker app 확인

wsl --list -v

NAME STATE VERSION 

* docker-desktop Running 2 

  docker-desktop-data Running 2


# 종료

wsl --shutdown


# tar파일 export

wsl --export docker-desktop <export path>\docker-desktop.tar 

wsl --export docker-desktop-data <export path>\docker-desktop-data.tar


# wsl에 등록해제

wsl --unregister docker-desktop 

wsl --unregister docker-desktop-data


# 생성한 tar파일 새로 저장한 디렉토리에 import

wsl --import docker-desktop <new location, e.g another drive> <export path>\docker-desktop.tar 

wsl --import docker-desktop-data <new location, e.g another drive> <export path>\docker-desktop-data.tar


# docker 재시작


2022년 1월 27일 목요일

[ AWS ] Lambda함수에서 Athena Table Repartition

 

[ 1. Athena Table Create ] 

테이블 생성 후

-- 설정된 파티션 보기

show partitions test_db.table_name;


-- 해당 파티션의 S3 location 보기

describe formatted test_db.table_name partition (partition_column='123123');



[ 2. Lambda 함수 작성 ]

람다 아테나 쿼리 실행 참조 : 

https://medium.com/dataseries/automating-athena-queries-from-s3-with-python-and-save-it-as-csv-8917258b1045

S3 트리거를 이용하여 Lambda 함수 호출 :

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-example.html



[ 3. Lambda Role 설정 ]

람다함수 -> 구성 -> 권한 -> 실행역활의 Role 정책 추가

AmazonS3FullAccess

AmazonAthenaFullAccess

CloudWatchLambdaInsightsExecutionRolePolicy



[ 4. 실행 테스트 ]

로그는 CloudWatch, Athena log(S3에 저장하도록 설정) 에서 확인


Insufficient Lake Formation permission 에러가 나온다면

LakeFormation -> permissions -> data lake permissions에서 

쿼리적용할 테이블에 대한 iam user 권한 설정


2022년 1월 11일 화요일

[ Grafana ] metadata DB 변경 ( mysql )

meta data storage는 default sqlite이다.

아래는 mysql로 setting하는 작업이다.


1. Mysql set up

  • mysql 설치
  • mysql에 grafana user와 privileges 설정
  • grafana session table 생성

2. grafana.ini 파일에서 mysql enable설정

3. grafana start


mysql

mysql> CREATE DATABASE grafana;

mysql> GRANT ALL ON `grafana`.* to 'grafana'@'%' identified by 'datatech';

mysql> flush privileges;

mysql> SELECT user, host FROM user;

mysql> CREATE TABLE `session` (`key` char(16) not null, `data` blob, `expiry` int(11) unsigned not null, primary key (`key`) ) ENGINE=MyISAM default charset=utf8;


sudo vi $GRAFANA_HOME/conf/grafana.ini

[database]

# Either "mysql", "postgres" or "sqlite3", it's your choice

;type = sqlite3

;host = 127.0.0.1:3306

;name = grafana

;user = root

;password =

type = mysql

host = mysqlserver.example.com:3306

name = grafana

user = grafana

password = grafanamysqluserpasswd

# For "postgres" only, either "disable", "require" or "verify-full"

;ssl_mode = disable

# For "sqlite3" only, path relative to data_path setting

;path = grafana.db



2022년 1월 10일 월요일

[ Grafana ] Alert


  • Alert rules
  • Contact points
  • Notification policies
  • Sliences
  • Alert groups


[ Alert rules ]

조건에 따른 알림 생성



알림을 저장할 Folder가 최소 1개 필요하다

'Run queries'버튼 클릭시 미리 임계값을 적용한 그래프보기 가능



[ Contact points ]

message보낼 template와

알림을 보낼 SNS정보( Contact points ) 등록가능 


[ Sliences ]

알림 설정을 잠시 동안 Off하는 기능


참조 : 

https://velog.io/@hansung/Grafana-8.0-%EA%B0%9C%EC%84%A0%EB%90%9C-%EC%95%8C%EB%A6%BC-%EA%B8%B0%EB%8A%A5


2022년 1월 9일 일요일

[ Prometheus ] PromQL 예제 (Prometheus Query Language)


[ Data Types ]

  • String - 문자열 변수
  • Scalar - 숫자 변수
  • Instant vector - a set of time series containing a single sample for each time series, all sharing the same timestamp
  • Range vector - a set of time series containing a range of data points over time for each time series


[ String ]

Example:

"this is a string"
'these are unescaped: \n \\ \t'
`these are not unescaped: \n ' " \t`



[ Scalar ]

Examples:

23
-2.43
3.4e-9
0x8f
-Inf
NaN



[ Instant vector selectors ]

{}를 사용하여 filtering 

prometheus_http_requests_total{job="prometheus",code="302"}
prometheus_http_requests_total{code=~"200|302|404",method!="GET"}

적어도 하나의 레이블과 매치시켜야 한다.

prometheus_http_requests_total{code=~".*"} # Bad
prometheus_http_requests_total{code=~".*",job="prometheus"} # Good!



[ Range Vector Selectors ]

[]를 범위를 선택한다. 그래프는 그릴 수 없다.

prometheus_http_requests_total{job="prometheus"}[3m]

Offset modifier를 이용하여 집계함수 사용

prometheus_http_requests_total offset 5m
sum(prometheus_http_requests_total{code="200"} offset 10m)
rate(prometheus_http_requests_total[10m] offset -1w)



[ SubQuery Example ]

min_over_time( rate(prometheus_http_requests_total[5m])[30m:1m] )
max_over_time( deriv( rate(distance_covered_meters_total[1m])[5m:1m] )[10m:] )



[ Operators ]

집계연산자

  • sum (calculate sum over dimensions)
  • min (select minimum over dimensions)
  • max (select maximum over dimensions)
  • avg (calculate the average over dimensions)
  • group (all values in the resulting vector are 1)
  • stddev (calculate population standard deviation over dimensions)
  • stdvar (calculate population standard variance over dimensions)
  • count (count number of elements in the vector)
  • count_values (count number of elements with the same value)
  • bottomk (smallest k elements by sample value)
  • topk (largest k elements by sample value)
  • quantile (calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions)

Example

sum without (code) (prometheus_http_requests_total) # code를 빼고 집계
sum by (instance, code) (prometheus_http_requests_total) # group by sum(instance), sum(code)
topk(5, prometheus_http_requests_total) # 가장 큰 요청 수



[ Function ]

# 지정된 함수 사용
round(rate(prometheus_http_requests_total[10m]),0.0001)
# 사용자 함수 정의
sum by (job) (
  rate(http_requests_total[5m])
)

정의된 함수 참조 : https://prometheus.io/docs/prometheus/latest/querying/functions/



2022년 1월 7일 금요일

[ Python ] ModuleNotFoundError: No module named

pip install로 해당 package를 다운 받았지만 

ModuleNotFoundError 에러가 나올 때


설치한 패키지의 directory가 python실행시 포함되는지 확인

$ cat test.py
import sys
print(sys.path)

$ python test.py
['', '/usr/lib/python3.6', '/usr/lib/python3.6/plat-x86_64-linux-gnu', ...'/usr/lib/python3.6/dist-packages']


python shell에서도 확인

$ python
>>> import sys
>>> print(sys.path)
>>> ['', '/usr/lib/python3.6', '/usr/lib/python3.6/plat-x86_64-linux-gnu...


두 값을 비교하여 설치한 모듈의 directory가

포함되지 않는다면 실행할 py파일에 해당 코드 추가

sys.path.append("path")