Skip to main content

[TTA] grafana 사용


오픈소스 grafana

근데 grafana는 AGPL이다.

grafana 링크

개념

log : 메시지

traces 연관관계

metric: 성능 수치

profile: 성능데이터 수집?

정형 로그 예시

{"asctime": "2024-10-31 15:25:05,533", "levelname": "ERROR", "message": "division by zero", "funcName": "<module>", "lineno": 38, "exc_info": "Traceback (most recent call last):\n  File \"C:\\cicd\\dev-ops-test\\loki-cloud\\main.py\", line 36, in <module>\n    result = 1 / 0\n             ~~^~~\nZeroDivisionError: division by zero", "taskName": null}
{"asctime": "2024-10-31 15:25:06,535", "levelname": "INFO", "message": "This is an INFO log message from my application.", "funcName": "<module>", "lineno": 23, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:07,536", "levelname": "INFO", "message": "This is an INFO log message from my application.", "funcName": "<module>", "lineno": 23, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:07,536", "levelname": "ERROR", "message": "division by zero", "funcName": "<module>", "lineno": 38, "exc_info": "Traceback (most recent call last):\n File \"C:\\cicd\\dev-ops-test\\loki-cloud\\main.py\", line 36, in <module>\n result = 1 / 0\n ~~^~~\nZeroDivisionError: division by zero", "taskName": null}
{"asctime": "2024-10-31 15:25:08,538", "levelname": "INFO", "message": "This is an INFO log message from my application.", "funcName": "<module>", "lineno": 23, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:08,539", "levelname": "WARNING", "message": "This is a simulated ValueError!", "funcName": "<module>", "lineno": 30, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:09,540", "levelname": "INFO", "message": "This is an INFO log message from my application.", "funcName": "<module>", "lineno": 23, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:09,541", "levelname": "WARNING", "message": "This is a simulated ValueError!", "funcName": "<module>", "lineno": 30, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:10,542", "levelname": "INFO", "message": "This is an INFO log message from my application.", "funcName": "<module>", "lineno": 23, "exc_info": null, "taskName": null}
{"asctime": "2024-10-31 15:25:10,543", "levelname": "ERROR", "message": "division by zero", "funcName": "<module>", "lineno": 38, "exc_info": "Traceback (most recent call last):\n File \"C:\\cicd\\dev-ops-test\\loki-cloud\\main.py\", line 36, in <module>\n result = 1 / 0\n ~~^~~\nZeroDivisionError: division by zero", "taskName": null}

위처럼 로그 작성하면 정형임.

Loki

Promtail이라는게 로그파일 읽어서 Loki로 보냄

key 발급

grafana에서 Security > Access Policies에서 정책 생성하고

add token으로 key발급 가능

realms는 all stacks

권한은 log write만 주고 정책 만들었따.

그리고 add token으로 토큰 생성

promtail agent

promtail 다운로드해야함.

(여기에서)[https://grafana.com/docs/loki/latest/send-data/promtail/installation/] 다운로드 할 수 있따.

docker, helm, binary 등등 있음

docker로 하는 예시는 아래와 같다.

  1. docker container pull하기
docker pull grafana/promtail:3.0.0
  1. promtail yaml파일 생성

grafana 페이지에서 launch 누르고 Loki 에서 Send log 클릭해서 yaml파일 복사

server:
http_listen_port: 9080
grpc_listen_port: 0

positions:
filename: ./tmp/positions.yaml

clients:
- url: https://1037811:<Your Grafana.com API Token>@logs-prod-030.grafana.net/loki/api/v1/push


scrape_configs:
- job_name: app_logs
static_configs:
- targets:
- localhost
labels:
job: my-devops-practice
host: my-labtop
# __path__: ./tmp/*.log
__path__: /var/log/*.log # config for container

container는 /var/log 저거 써야한다. 위에꺼는 windwos binary 전용

  1. docker run
docker run --name promtail --volume "$PWD/promtail:/etc/promtail" --volume "$PWD/tmp:/var/log" grafana/promtail:3.0.0 --config.file=/etc/promtail/config.yaml

그럼 확인하는 방법은

Home에서 grafana launch 클릭해서 cloud home으로 들어가서

Explore 들어가서 grafanacloud-<username>-logs을 눌른다.

그리고 query에서 config.yaml에 입력했던 host: my-labtop을 이용해서

host = my-labtop을 만들어줌

sync 하고 live 하면 끝

근데 실제 app을 실행해서 로그 생성되도록 해야한다.

promtail은 로그를 읽고 전송만하는 친구임

dashboard

대시보드 만들수 있는데

copy paste할 수 있음.

copy 해서 Add > Paste Panel 하면 가능

sum by(level)(count_over_time({host="my-labtop"} |~ "info|INFO" [$__interval]))

쿼리가 위처럼 돼있는데 중요한 부분은 {host="my-labtop"} 이부분임.

오픈소스 프로메테우스 대시보드

프로메테우스는 apache다.

prometheus 링크