Day12- GPT 陪我讀 Grafana OpenTelemetry
Day13- GPT 陪我讀 將 OpenTelemetry Collector 連接到 Grafana Cloud 資料庫
Day14- GPT 陪我讀 OpenTelemetry Collector Use Case 1 Fan out
Day15- GPT 陪我讀 OpenTelemetry Collector Use Case 2 Telemetry data normalization
Day16- GPT 陪我讀 OpenTelemetry Collector Use Case 4 Load balancing
Day17- GPT 陪我讀 OpenTelemetry Collector Use Case 5 Multi-cluster
Day18- GPT 陪我讀 OpenTelemetry Collector Use Case 6 Multitenant
Day19- GPT 陪我讀 OpenTelemetry Collector Use Case 7 Per signal
使用 OpenTelemetry 收集器將日誌發送到 Grafana Loki
收集器具有多個接收器來協助數據攝取:journald、filelog、syslog、loki 等。
本節包括如何設置 OpenTelemetry 收集器以使用一個或多個接收器收集日誌並將它們發送到 Loki 的示例。
想像一下,您有一個正在運行的應用程序,您希望從中收集指標、跟踪和日誌。
使用 OpenTelemetry 收集器允許您在一個地方收集所有這些信號,並控制各個信號發送到的各種後端。
在本指南中,我們將重點關注日誌。
想像一下,您使用 OpenTelemetry 收集器收集指標和跟踪,並使用 Promtail 收集應用程序日誌。現在,您希望將日誌收集配置移動到 OpenTelemetry 收集器,與其他信號一起。
Loki 接收器組件將幫助您完成這項工作。您需要做的只是在 OpenTelemetry 收集器管道中添加 loki 接收器,並更改當前的 Promtail 配置,使其將收集到的日誌發送到收集器而不是 Loki。
Loki 接收器將以 Loki 格式獲取此數據,將其轉換為 OTLP 格式,然後通過處理管道進一步發送。
這是一個使用 Promtail 將日誌發送到 Loki 的應用程序示例。
置條件
在我們開始之前,需要確保 Loki、Grafana、Promtail 和應用程序都在運行中。在本指南中,我們將使用 docker-compose 來運行它們。首先,創建一個新目錄,名為 example
:
$ mkdir example
$ cd example
接著,在 example
目錄內創建一個名為 promtail-local-config.yaml
的文件:
---
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: flog_scrape
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
relabel_configs:
- source_labels: ['__meta_docker_container_name']
regex: '/(.*)'
target_label: 'container'
再創建一個名為 docker-compose.yaml 的文件:
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
grafana:
image: grafana/grafana:latest
environment:
- "GF_AUTH_DISABLE_LOGIN_FORM=true"
- "GF_AUTH_ANONYMOUS_ENABLED=true"
- "GF_AUTH_ANONYMOUS_ORG_ROLE=Admin"
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
url: http://loki:3100
EOF
/run.sh
ports:
- "3000:3000"
depends_on:
- loki
networks:
- loki
promtail:
image: grafana/promtail:2.8.0
volumes:
- ./promtail-local-config.yaml:/etc/promtail/config.yaml:ro
- /var/run/docker.sock:/var/run/docker.sock
command: -config.file=/etc/promtail/config.yaml
networks:
- loki
flog:
image: mingrammer/flog
command: -f json -d 1s -l
networks:
- loki
執行:
docker-compose up -d
現在,Grafana 正在 http://localhost:3000 運行,而 Loki 正在 http://localhost:3100 運行。Flog 應用程序會生成日誌,而 Promtail 則收集這些日誌並將其發送到 Loki。
打開 http://localhost:3000,然後前往 Explore,選擇 Loki 數據源。從標籤過濾器下拉菜單中選擇 container
,從值下拉菜單中選擇 promtail-lokireceiver-flog-1
。您將看到 flog 應用程序的日誌。
現在,我們要更改配置,使 Promtail 將日誌發送到 OpenTelemetry collector 而不是 Loki。在 example
目錄中創建 otel-config.yaml
文件:
receivers:
loki:
protocols:
http:
use_incoming_timestamp: true
processors:
attributes:
actions:
- action: insert
key: loki.attribute.labels
value: container
- action: insert
key: loki.format
value: raw
exporters:
loki:
endpoint: http://loki:3100/loki/api/v1/push
service:
pipelines:
logs:
receivers: [loki]
processors: [attributes]
exporters: [loki]
在這裡,我們使用 attributes 處理器將 container
屬性提升到 Loki 標籤,並指定用於將日誌行寫入 Loki 的格式。有關標籤和格式的更多詳細信息可以在 Loki 出口者 README 中找到。
在 docker-compose.yaml
中添加服務,以在容器中運行 OpenTelemetry collector:
otelcol:
image: otel/opentelemetry-collector-contrib:0.76.1
deploy:
resources:
limits:
memory: 125M
restart: unless-stopped
command: [ "--config=/etc/otelcol-config.yaml" ]
volumes:
- ./otelcol-config.yaml:/etc/otelcol-config.yaml
ports:
- "3500:3500" # loki receiver HTTP
networks:
- loki
並更改 promtail-local-config.yaml
,使其將日誌發送到 OpenTelemetry collector 而不是 Loki:
clients:
- url: http://otelcol:3500/loki/api/v1/push
重新啟動 docker-compose:
docker-compose restart
打開 http://localhost:3000 並前往 Explore,選擇 Loki 數據源。從標籤過濾器下拉列表中選擇容器,並從值下拉列表中選擇 promtail-lokireceiver-flog-1。請查看此指南文檔以獲得有關使用 Explore 查詢和查看 Loki 數據的幫助。
您將看到與之前相同的日誌,只是添加了新的標籤 exporter=OTLP。但是,現在這些日誌被發送的後端在與其他信號相同的地方配置:在 OpenTelemetry 收集器配置 otel-config.yaml 中。
作為 Promtail 的客戶端使用 OpenTelemetry 收集器允許將 loki 格式的日誌注入到收集器中,然後可以將其轉換為 OTLP 格式並由收集器管道進行處理。如果您願意,可以更改後端並將您的日誌發送到另一個存儲。
在本指南中,我們提供了配置 Promtail 和 OpenTelemetry 收集器所需的所有步驟。Promtail 刮取應用程序日誌並將其發送到 OpenTelemetry 收集器以進行進一步的處理。這種設置允許我們將所有遙測信號的配置保持在一個地方 - OpenTelemetry 收集器配置中。