iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
自我挑戰組

GPT伴我讀一些文件系列 第 20

Day20- GPT 陪我讀 Send logs to Loki with Loki receiver

  • 分享至 

  • xImage
  •  

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 的示例。


使用 Loki 接收器將日誌發送到 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 應用程序的日誌。

使用 OpenTelemetry Collector 將日誌發送到 Loki

現在,我們要更改配置,使 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 收集器配置中。


上一篇
Day19- GPT 陪我讀 OpenTelemetry Collector Use Case 7 Per signal
下一篇
Day21- GPT 陪我讀 如何使用 OpenTelemetry Collector 擴展您的收集管道
系列文
GPT伴我讀一些文件31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言