windows에서 docker사용 시 .wslconfig file을 통해 docker메모리를 관리한다.
windows에서 docker사용 시 .wslconfig file을 통해 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 재시작
[ 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 권한 설정
meta data storage는 default sqlite이다.
아래는 mysql로 setting하는 작업이다.
1. Mysql set up
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
[ 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
[ Data Types ]
[ 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/
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")