Fetch promtail helm chart
➜ helm repo add grafana <https://grafana.github.io/helm-charts>
➜ helm repo update
➜ helm fetch grafana/promtail
➜ tar zxvf promtail-6.15.5.tgz
➜ helm upgrade --install promtail . -f ./values.yaml --namespace loki --create-namespace
Deploy helm chart
Edit values.yaml
daemonset:
enabled: true # DaemonSet을 사용하여 Promtail을 배포할지 여부를 결정합니다. Kubernetes 클러스터의 모든 노드에 Promtail을 배포하려면 true로 설정합니다.
serviceAccount:
create: true # Promtail이 사용할 Kubernetes Service Account를 생성할지 여부를 결정합니다.
name: promtail-sa # 생성할 Service Account의 이름을 지정합니다.
annotations: {} # Service Account에 추가할 어노테이션을 지정합니다.
config:
logLevel: info
serverPort: 3101
# 로그를 전송할 Loki 서버의 URL을 지정
clients:
# - url:
- url:
enableTracing: false # 트레이싱 기능을 활성화할지 여부를 결정합니다.
snippets:
pipelineStages:
- cri: {} # CRI 로그 포맷을 처리하기 위한 파이프라인 스테이지를 정의합니다.
common:
- action: replace
source_labels:
- __meta_kubernetes_pod_node_name
target_label: node_name # Kubernetes 노드 이름을 기반으로 node_name 레이블을 생성합니다.
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: namespace # Pod의 네임스페이스를 기반으로 namespace 레이블을 생성합니다.
- action: replace
replacement: $1
separator: /
source_labels:
- namespace
- app
target_label: job # namespace와 app 레이블을 조합하여 job 레이블을 생성합니다.
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: pod # Pod 이름을 기반으로 pod 레이블을 생성합니다.
- action: replace
source_labels:
- __meta_kubernetes_pod_container_name
target_label: container # 컨테이너 이름을 기반으로 container 레이블을 생성합니다.
- action: replace
replacement: /var/log/pods/*$1/*.log
separator: /
source_labels:
- __meta_kubernetes_pod_uid
- __meta_kubernetes_pod_container_name
target_label: __path__ # 로그 파일의 경로를 지정합니다.
- action: replace
replacement: /var/log/pods/*$1/*.log
regex: true/(.*)
separator: /
source_labels:
- __meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash
- __meta_kubernetes_pod_annotation_kubernetes_io_config_hash
- __meta_kubernetes_pod_container_name
target_label: __path__ # 수정된 조건으로 로그 파일의 경로를 지정합니다.
addScrapeJobLabel: false # 스크레이프 작업의 레이블을 추가하여 Promtail 구성을 디버깅하는 데 도움을 줍니다.
extraLimitsConfig: "" # 'limits_config' 블록에 직접 추가될 키를 지정할 수 있습니다.
extraServerConfigs: "" # 'server' 블록에 직접 추가될 키를 지정할 수 있습니다.
extraScrapeConfigs: "" # 추가적인 스크레이프 구성을 config 파일에 추가할 수 있습니다.
extraRelabelConfigs: [] # "kubernetes-pods" 작업에 추가적인 relabel_configs를 추가할 수 있습니다.
# Kubernetes 파드에서 로그를 수집하기 위한 스크레이프 구성입니다.
scrapeConfigs: |
# Promtail의 스크레이프 구성 예시입니다. 참조: <https://github.com/grafana/loki/blob/master/production/ksonnet/promtail/scrape_config.libsonnet>
- job_name: kubernetes-pods
pipeline_stages:
{{- toYaml .Values.config.snippets.pipelineStages | nindent 4 }}
kubernetes_sd_configs:
- role: pod # Kubernetes 파드에서 로그를 수집합니다.
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_controller_name
regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?
action: replace
target_label: __tmp_controller_name
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_name
- __meta_kubernetes_pod_label_app
- __tmp_controller_name
- __meta_kubernetes_pod_name
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: app
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_instance
- __meta_kubernetes_pod_label_release
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: instance
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_component
- __meta_kubernetes_pod_label_component
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: component
{{- if .Values.config.snippets.addScrapeJobLabel }}
- replacement: kubernetes-pods
target_label: scrape_job
{{- end }}
{{- toYaml .Values.config.snippets.common | nindent 4 }}
{{- with .Values.config.snippets.extraRelabelConfigs }}
{{- toYaml . | nindent 4 }}
{{- end }}
# Promtail 구성 파일의 내용을 정의합니다. 이는 스트링 형태로 구성되어야 하며, 템플릿을 사용하여 재사용 가능한 스니펫으로부터 조합됩니다.
file: |
server:
log_level: {{ .Values.config.logLevel }} # 서버의 로그 레벨을 설정합니다.
http_listen_port: {{ .Values.config.serverPort }} # 서버의 HTTP 리스닝 포트를 설정합니다.
{{- with .Values.httpPathPrefix }}
http_path_prefix: {{ . }} # HTTP 경로 접두사를 설정합니다.
{{- end }}
{{- tpl .Values.config.snippets.extraServerConfigs . | nindent 2 }}
clients:
{{- tpl (toYaml .Values.config.clients) . | nindent 2 }} # Loki 서버로 로그를 전송할 클라이언트 구성을 정의합니다.
positions:
filename: /run/promtail/positions.yaml # 로그 파일 위치 추적을 위한 파일 경로를 설정합니다.
scrape_configs:
{{- tpl .Values.config.snippets.scrapeConfigs . | nindent 2 }} # 스크레이프 구성을 포함합니다.
{{- tpl .Values.config.snippets.extraScrapeConfigs . | nindent 2 }} # 추가 스크레이프 구성을 포함합니다.
limits_config:
{{- tpl .Values.config.snippets.extraLimitsConfig . | nindent 2 }} # 처리 제한 설정을 포함합니다.
tracing:
enabled: {{ .Values.config.enableTracing }} # 트레이싱 기능 활성화 여부를 설정합니다.
networkPolicy:
enabled: false # 네트워크 정책을 생성할지 여부를 결정합니다.
metrics:
podSelector: {} # 메트릭 포트에 접근을 허용할 Pod를 지정합니다.
namespaceSelector: {} # 메트릭 포트에 접근을 허용할 네임스페이스를 지정합니다.
cidrs: [] # 메트릭 포트에 접근을 허용할 특정 네트워크 CIDR을 지정합니다.
k8sApi:
port: 8443 # Kubernetes API 엔드포인트 포트를 지정합니다.
cidrs: [] # 특정 네트워크 CIDR에 대한 접근을 제한합니다.
httpPathPrefix: ""
sidecar:
configReloader:
enabled: false # 구성을 동적으로 리로드하는 사이드카 컨테이너를 활성화할지 여부를 결정합니다.
image:
registry: docker.io
repository: jimmidyson/configmap-reload
tag: v0.8.0
pullPolicy: IfNotPresent
config:
serverPort: 9533
serviceMonitor:
enabled: true
기본 설정
- serviceAccount.annotations: AWS 리소스의 권한이 필요할 경우, AWS 역할을 만들고 여기에 추가해서 권한을 사용할 수 있습니다.
- config.clients: Loki의 gateway 주소를 작성합니다.
Snippets 설정
- pipelineStages: 로그 파이프라인 스테이지를 정의합니다. 예를 들어, cri: {}는 CRI 로그 포맷을 파싱합니다.
- common: 여러 kubernetes_sd_configs에 공통적으로 사용될 수 있는 재사용 가능한 스니펫입니다. 이를 통해 레이블을 동적으로 설정하고, 로그 파일 경로를 지정할 수 있습니다. 예를 들어, __meta_kubernetes_pod_node_name 소스 레이블의 값을 node_name 타겟 레이블로 대체합니다.
추가 구성
- addScrapeJobLabel: 스크레이프 작업 레이블을 추가하여 Promtail 구성을 디버깅할 때 도움을 줍니다. 기본값은 false입니다.
- extraLimitsConfig, extraServerConfigs, extraScrapeConfigs, extraRelabelConfigs: 사용자가 추가로 제공할 수 있는 설정 옵션으로, Promtail의 limits_config, server, scrape_configs, 그리고 relabel_configs에 직접 추가됩니다.
Network Policy와 Sidecar 설정
- networkPolicy: 네트워크 정책을 활성화하여 Promtail 서버에 대한 접근을 제한합니다. 기본값은 false입니다.
- sidecar: Promtail 구성을 동적으로 리로드하는 사이드카 컨테이너를 설정합니다. 예를 들어, configReloader는 구성 변경 사항이 있을 때 Promtail을 자동으로 리로드합니다.
helm install promtail
➜ helm upgrade --install promtail . -f ./values.yaml --namespace loki --create-namespace