【ビッグデータ】LPGログ収集ソリューション(公式サイトエントリー事例)


この記事ではLPG、LPG実験、公式 入門 事例を紹介していますが、とても面白くて数時間かかりますので、ぜひ一緒に体験してみてください!

私が以前使用していたログ収集ソリューションは ELK で、多くの場合数ギガバイトのメモリを消費し、構成が不十分な一部のサーバーはそれに耐えられません。最近、軽量のログ収集ソリューションである Loki+Promtail+Grafana (略して LPG) を発見しました。メモリは数百 MB で十分で、インターフェイスは非常に優れています。皆さんにお勧めします。

はじめに: 環境は Mac や Windows ではなく、Linux マシンです。

1.LPGの概要

LPG ログ収集ソリューションはメモリ占有量が非常に少なく、経済的で効率的です。ELK ログ システムのようにログにインデックスを付けるのではなく、ログ ストリームごとに一連のタグを設定します。以下にそのコアコンポーネントを紹介します。

  • Promtail: Filebeat に似たログ コレクター。ログ ファイル内のログを収集し、収集したデータを Loki にプッシュできます。

  • Loki: ログ データを集約して保存し、Grafana に視覚的なデータを提供するための Grafana のデータ ソースとして使用できます。

  • Grafana: Loki からログ情報を取得し、視覚的に表示します。

上の図の説明:

1. 各サーバーをデプロイする必要がありますPromtail。責任は、このサーバーのログを監視および収集し、それらを Loki ストレージ サービスにプッシュすること/var/logです。デフォルトは、監視および収集ディレクトリです。

2. Loki はログストレージを担当します

3. Grafana はデータ視覚化であり、Loki でのログの読み取りを担当します。

2. インストール

このログ収集ソリューションを実装するには、Loki、Promtail、Grafana などのサービスをインストールする必要がありますが、docker-composeこれらを直接インストールするのが非常に便利です。

公式 Web サイトの「Install with Docker Compose」ソリューションを採用しています。以下は、公式 Web サイトのソリューションの簡単な紹介です。

1. まず、Docker Compose をインストールする必要があります (ご自身でインストールしてください)

2. docker-compose スクリプトをダウンロードして実行します。

wget https://raw.githubusercontent.com/grafana/loki/v2.8.0/production/docker-compose.yaml -O docker-compose.yaml
docker-compose -f docker-compose.yaml up

この Web サイトは海外ではデフォルトでアクセスできないため、作成者が提供したスクリプトdocker-compose.yamlを私が直接使用できるようにダウンロードしました。読者は、リファレンス ブログを使用して、raw.githubusercontent.com にアクセスできない問題の解決を試みることもできます。完全なスクリプトと手順は、この記事の最後にある付録にも記載されています。

3. 正常に実行された後、docker psコマンドを使用して 3 つのサービスを表示できます。

[root@server123 ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                       NAMES
a519d567e6a4   grafana/promtail:2.8.0   "/usr/bin/promtail -…"   About an hour ago   Up About a minute                                               plg-promtail-1
c880ad914857   grafana/grafana:latest   "sh -euc 'mkdir -p /…"   About an hour ago   Up About a minute   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   plg-grafana-1
dcc6c716cd69   grafana/loki:2.8.0       "/usr/bin/loki -conf…"   About an hour ago   Up About a minute   0.0.0.0:3100->3100/tcp, :::3100->3100/tcp   plg-loki-1

3. ログスキームの効果をテストする

3.1. テスト 1: Promtail は/var/logディレクトリの変更を監視します

実験の目的: Promtail が /var/log ディレクトリ内の変更を監視できるかどうかをテストします。

実験手順:

1. /var/log ディレクトリに新しいファイルを作成します。

# 输出'hello lpg'到/var/log/lpg.log 文件
echo 'hello lpg' > /var/log/lpg.log

2. コンソールで /var/log/lpg.log ファイルを監視します。

/var/logこれは、サーバーの特定のディレクトリ (デフォルト) の変更を監視し、ログを Loki に送信するという Promtail の役割も確認します。

3. 検証を続ける

  • 何かを入力すると/var/log/test.sql監視できますか?
  • 何かを入力すると/var/log/fire/spring.log監視できますか?

3.2. テスト 2: Grafana を使用してログを視覚的に表示する

実験の目的: Promtail によって監視されているログを視覚化プラットフォーム Grafana を通じて表示する

実験手順:

  1. Grafana にログインします。アカウントのパスワードは ですadmin:admin。ログインに成功したら、Loki をデータ ソースとして追加する必要があります。アクセス アドレス: http://192.168.56.123:3000/

  2. Loki データ ソースは、docker-compose.yml スクリプトの実行後にデフォルトで追加されます。

  3. デフォルトで追加されたデータ ソースを確認してください。その後、Loki アクセス アドレスを設定し、[Save&test保存してテスト] をクリックすると、設定が成功したことを示す緑色のプロンプト メッセージが表示されます。

    下の図の http://loki:3100 は、loki スクリプトによってインストールされたネットワークです。docker network

  4. 次に、ExploreLoki を選択し、クエリ式 (Loki クエリ) を入力すると、ログが{filename="/var/log/lpg.log"}表示されます。测试1

3.3. テスト 3: デプロイされた Spring Boot プログラムのログは Grafana でも表示できることが予想されます

実験目的: Spring Boot ログの分散監視

実験手順:

実験では、新しい Spring Boot アプリケーションを作成しました。Spring Boot 設定ファイル application.yml で、logger.path=/var/logログの出力ディレクトリは /var/log として指定されました。Spring Boot ログ ファイルのデフォルトの出力名は spring.log です。つまり、/var/log/spring.log ファイルが出力ログ ファイルとして使用されます。このファイルは Promtail によって設定されたルールに準拠している/var/log/*.logため、監視する必要があります。最後に、視覚化プラットフォーム Grafana でログをクエリできるかどうかを確認します。

次のように進めます。

1. Spring Bootアプリケーションのapplication.ymlの一部設定内容

# 配置日志文件的输出目的地
logging:
  path: /var/log

2. 準備した Spring Boot アプリケーションの jar パッケージを Promtail サーバーにアップロードします

3. アプリケーションを起動し、/var/log/spring.log に内容があるかどうかを確認します。

java -jar fire-tiny-loki-1.0-SNAPSHOT.jar
tail -f /var/log/spring.log

4. 可視化プラットフォームGrafanaでログを検索する

http://loki:3100 にログインし、ExploreLoki を選択してクエリ式 (Loki クエリ) を入力してログ{filename="/var/log/spring.log"}を表示します。测试1

**概要:** 各サーバーは Promtail サービスをデプロイする必要があります。このサービスは特定のログ ディレクトリを監視します。ディレクトリが変更されると、コンテンツはログ ストレージのために Loki に送信されます。最後に、すべてのマイクロサービスのログは、 Grafana 視覚化プラットフォームの情報。

3.4. 落とし穴の記録

著者は本当に騙されたので、今後の指針として罠を踏む過程を記録しました。

冒頭で实验1述べたように、Promtail はデフォルトで /var/log ディレクトリを監視しますが、作成者の /var/log/fire/spring.log、/var/log/test.sql およびその他のファイルが見つからないという奇妙な問題が発生しました。 Grafana 可視化プラットフォームを介して、なぜ、o(╯□╰)o

分析プロセス:

1. 上記の/var/log/lpg.logなど、監視できるファイルと監視できないファイルがあり、設定の問題であると推測されます。

2. Promtail コンテナに入り、構成ファイルを表示します/etc/promtail/config.yml。構成ファイルの一部は次のとおりです。

# ...
# 部分内容
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*.log

3. 設定ファイルを確認します__path__: /var/log/*log。この設定によれば、/var/log ディレクトリ内の .log で終わるファイルのみが監視されます。その後、/var/log/fire/spring.log および /var/log/test.sql が監視されます。設定した内容は当然クエリされません。問題が見つかったので、公式 Web サイトを__path__確認して使用しglob patterns設定を変更して/var/log/**/*.log試してください。この設定スタイルも ant スタイルのスタイルに似ており、Spring でもよく使用されています。大きな問題にはなりませんが、それでそれを修正し始めてください。

4. コンテナの設定内容を直接変更しますが、Promtail コンテナにはデフォルトで vi などの編集コマンドがインストールされていませんが、 Linux の/etc/promtail/config.yml最もオリジナルなコマンドを使用してファイルを上書きします (主に怠惰のため、これが一番簡単です)echo/etc/promtail/config.yml

# 1、先进入容器
docker exec -it lpg-promtail-1 /bin/bash
# 2、cat查看内容
cat /etc/promtail/config.yml
# 3、把内容复制到编辑器进行编辑
# 只改动一行,把/var/log/*.log改为/var/log/**/*.log
# 4、把编辑后的内容输出了...处开始覆写
echo '...' > /etc/promtail/config.yml
# 5、最后退出promtail容器

3 つのコンテナを再起動します

docker-compose down
docker-compose up

5. 再起動後、いくつかの新しいファイルを作成し、http://192.168.56.123:3100 を通じてアクセスします。

⚠️⚠️⚠️⚠️⚠️⚠️ に特に注意してください。下の図のファイル名は特に promtail 構成を参照している__path__: /var/log/**/*.logため、/app/logs/fire/spring.logなどを使用してアクセスすることはできません。結局のところ、ホストは視覚化ツール Grafana と密接に関連しており、Grafana に関連しているのは Promtail だけです。

6. ホストとコンテナをマウントして Promtail 構成ファイルを変更します (ステップ 5 と 6 のいずれかを選択するだけです)。

ホスト上の構成ファイルを変更し、ホストとコンテナーをマウントすることで Promtail 構成ファイルを間接的に変更します。具体的な手順は次のとおりです。

  • docker-compose を停止し、最初に作成した 3 つの Docker コンテナーを削除します。

    # 停止容器
    docker-compose down
    # 删除容器
    docker rm lpg-grafana-1;
    docker rm lpg-loki-1;
    docker rm lpg-promtail-1;
    
  • ホスト上に新しい構成/app/etc/promtail/config.ymlファイルを作成します

    付録の config.yml ファイルをコピーします。

    # 创建目录
    mkdir -p /app/etc/promtail
    # 复制附录内容填写到...位置
    echo '...' > /app/etc/promtail/config.yml
    

    ファイルを微調整する__path__だけです

    # ...
    # 部分内容
    scrape_configs:
    - job_name: system
      static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/**/*.log
    
  • docker-compose.yml スクリプトの内容の一部を次のように変更します。

    # 创建目录
    mkdir -p /app/logs
    
      # 日志收集器
      promtail:
        image: grafana/promtail
        container_name: lpg-promtail
        volumes:
          # 把主机的/app/logs挂载到容器的/var/log
          - /app/logs/:/var/log/
          - /app/etc/promtail:/etc/promtail/
        # 这里指的是容器内部的/etc/promtail/promtail.yml文件
        command: -config.file=/etc/promtail/promtail.yml
    
  • いくつかの準備ができて docker-compose を再起動します

    docker-compose up
    
  • 再起動後、いくつかの新しいファイルを作成し、http://192.168.56.123:3100 を通じてアクセスしても問題ありません。

4. オフィシャルエントリー事例紹介

はじめに: Linux 用の Docker Compose 環境を準備してください。

この記事の前の LPG の簡単な紹介では、その他のコンポーネントがいくつか紹介されていませんでしたが、正式な導入事例の紹介では、システムが大規模になり、その他のコンポーネントがいくつか紹介されました。一緒に体験してみましょう!公式開始アドレス

このガイドは、読者が簡単な Loki クラスターを作成して使用するのに役立ちます。このクラスターはテスト、開発、評価を目的としており、ほとんどの運用要件を満たしていません。

実験プロセスの紹介:

1. テスト環境は flog アプリケーションを実行してログ行を生成します。

2. Promtail はテスト環境のエージェント (またはクライアント) であり、ログ行をキャプチャし、ゲートウェイ経由で Loki クラスターにプッシュします。

一般的な環境では、ログ生成アプリケーションとエージェントが一緒に実行されます。

3. Grafana は、Loki に保存されているログをクエリし、クエリ結果を視覚化する方法を提供します。

アーキテクチャ図:

上の図の簡単な説明は次のとおりです。

  • flog は、いくつかの一般的な形式 (Apache、Nginx、RFC3164、Json など) でログを生成できる、開発されたテスト ログ ジェネレーターです。

  • Promtail は生成されたログを監視し、それらをゲートウェイ (つまり nginx) インターフェイスにプッシュします。

    flog と Promtail は点線で囲まれており、クライアントとして理解されます。

  • ゲートウェイは実際にはリクエスト転送を実装する nginx です

    1. Promtail プッシュ ログ リクエストの転送

    2. Grafana のログ確認リクエストを転送する

  • Loki 書き込みコンポーネントは、ゲートウェイによってプッシュされたログの書き込みを担当します。

  • Loki 読み取りコンポーネントは、MiniO に保存されているログの読み取りを担当します。

  • Grafana はブラウザのアクセスログ可視化プラットフォームです

公式エントリーケースの実験手順:

4.1. テスト環境の取得

1. 別のディレクトリを用意する

mkdir evaluate-loki
cd evaluate-loki

注: コンテナーの起動後に flog によって生成されたログは、現在のフォルダー (evaluate-loki) の隠しディレクトリに存在します.data

2. loki-config.yamlpromtail-local-config.yaml、およびdocker-compose.yaml3 つのスクリプトをダウンロードします

wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/docker-compose.yaml -O docker-compose.yaml

この Web サイトはデフォルトでは海外ではアクセスできないため、作成者が提供した3 つのスクリプトを私が直接使用できるようにダウンロードしました。読者は、リファレンス ブログを使用して、raw.githubusercontent.com にアクセスできない問題の解決を試みることもできます。完全なスクリプトと手順は、この記事の最後にある付録にも記載されています。

4.2. 導入環境

Evaluate-loki の現在のディレクトリに入り、次のコマンドを使用してバックグラウンドで起動します。

docker-compose up

起動後、コンソール上に定期的にログが出力されますが、これは動作中のflogの出力ログです。各 json ログは、Promtail によってゲートウェイ経由でインターフェイスにプッシュされます/loki/api/v1/push

http://192.168.56.123:3101/ready にアクセスして、loki read の準備ができているかどうかを確認してください。

http://192.168.56.123:3102/ready にアクセスして、loki 書き込みの準備ができているかどうかを確認してください。

docker-compose.yaml スクリプトに定義されている docker コンテナがすべて起動しているか確認し、すべて起動していれば大きな問題はありません。合計7つのサービスが開始されていることがわかります。

4.3. Grafana を使用したテスト

http://192.168.56.123:3000 にログインします。デフォルトでデータソースが構成されています。次に、ExploreLoki をクリックして選択し、クエリ式 (Loki クエリ) を入力して{container="evaluate-loki-flog-1"}、[クエリ] をクリックします。

[クエリ] を繰り返しクリックして、flog によって生成された最新のログを表示します。1 秒あたり 1 つのログは、flog の設定と完全に一致します。公式 Web サイトには、自分で試すことができる他のクエリ式も多数提供されています。

{container="evaluate-loki-flog-1"} |= "GET"
{container="evaluate-loki-flog-1"} |= "POST"
{container="evaluate-loki-flog-1"} | json | status="401"
{container="evaluate-loki-flog-1"} != "401"

4. 付録

4.1. docker-compose スクリプトファイル

スクリプト ファイルには loki、promtail、grafana という 3 つのサービスが定義されているため、スクリプト ファイルを理解する必要があります。

元の docker-compose ファイルの内容は次のとおりです (注釈を追加)。

version: "3"

# 创建docker容器的网络,方便互通
networks:
  loki:

services:
  loki:
    image: grafana/loki:2.8.0
    ports:
      - "3100:3100"
    # loki执行的命令是容器中的/etc/loki/local-config.yaml来启动loki
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.8.0
    # 执行主机与docker容器的文件挂载关系
    volumes:
      - /var/log:/var/log
    # promtail执行的命令是容器中的/etc/promtail/config.yml来启动promtail
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    environment:
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    # grafana启动所执行的脚本
    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 
          orgId: 1
          url: http://loki:3100
          basicAuth: false
          isDefault: true
          version: 1
          editable: false
        EOF
        /run.sh
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

4.2. local-config.yaml ファイル

docker コンテナを使用して/etc/loki/local-config.yamlloki を起動します。lokiコンテナから取り出した元ファイルの内容は以下のとおりです(追記)。

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
#  reporting_enabled: false

4.3. config.yml ファイル

docker コンテナを使用して/etc/promtail/config.ymlpromtail を開始します。promtailコンテナから取り出した元ファイルの内容は以下の通りです(注釈追加)。

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: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*.log
  • erverプロパティは、HTTP サーバーとしての Promtail の動作を構成します。
  • positionsこのプロパティは、Promtail がファイルを保存する場所を構成し、ファイルをどこまで読み取ったかを示します。これは Promtail が再起動するときに必要で、中断したところからログの読み取りを続行できるようになります。
  • scrape_configsプロパティは、Promtail が指定された検出方法を使用してさまざまなターゲットからログを収集する方法を構成します。
    • static_configsキャプチャログの静的ターゲット構成、静的構成ではターゲットリストとラベルセットを指定できます
    • label取得するログ ファイルと、__path__ で定義されたファイル ログ ストリームに適用するオプションの追加タグのセットを定義します。

詳細な構成リファレンス:

  • Promtail 構成ファイルの説明: https://cloud.tencent.com/developer/article/1824988

  • Promtail 公式ドキュメント: https://grafana.com/docs/loki/latest/clients/promtail/configuration/

4.4. 公式の入門ケーススクリプト

4.4.1. docker-compose.yaml

このスクリプトは docker-compose のビルド スクリプトです。簡単に説明します。

1. アーキテクチャ図でいくつかのサービスを定義します (flog、nginx、promtail、loki read、loki write、minio、grafana など)。

2. 各サービスの起動は、基本的にcommandまたはshスクリプトから起動します。

  • flog、loki read、loki write、promtail はコマンド メソッドを使用します。
  • nginx、minio、grafana は sh スクリプトを使用します

3. サービス間に依存関係がある

  • たとえば、loki read と loki write はすべて minio に依存しており、minio はストレージ サービスを提供する最後のサービスです。

4.ダウンロードし設定ファイルはvolumesサービスをマウントして使用します。loki-config.yamlpromtail-local-config.yaml

---
version: "3"

networks:
  loki:

services:
  read:
    image: grafana/loki:2.8.3
    command: "-config.file=/etc/loki/config.yaml -target=read"
    ports:
      - 3101:3100
      - 7946
      - 9095
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
    depends_on:
      - minio
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks: &loki-dns
      loki:
        aliases:
          - loki

  write:
    image: grafana/loki:2.8.3
    command: "-config.file=/etc/loki/config.yaml -target=write"
    ports:
      - 3102:3100
      - 7946
      - 9095
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    depends_on:
      - minio
    networks:
      <<: *loki-dns

  promtail:
    image: grafana/promtail:2.8.3
    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
    depends_on:
      - gateway
    networks:
      - loki

  minio:
    image: minio/minio
    entrypoint:
      - sh
      - -euc
      - |
        mkdir -p /data/loki-data && \
        mkdir -p /data/loki-ruler && \
        minio server /data
    environment:
      - MINIO_ROOT_USER=loki
      - MINIO_ROOT_PASSWORD=supersecret
      - MINIO_PROMETHEUS_AUTH_TYPE=public
      - MINIO_UPDATE=off
    ports:
      - 9000
    volumes:
      - ./.data/minio:/data
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 15s
      timeout: 20s
      retries: 5
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    environment:
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    depends_on:
      - gateway
    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://gateway:3100
            jsonData:
              httpHeaderName1: "X-Scope-OrgID"
            secureJsonData:
              httpHeaderValue1: "tenant1"
        EOF
        /run.sh
    ports:
      - "3000:3000"
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - loki

  gateway:
    image: nginx:latest
    depends_on:
      - read
      - write
    entrypoint:
      - sh
      - -euc
      - |
        cat <<EOF > /etc/nginx/nginx.conf
        user  nginx;
        worker_processes  5;  ## Default: 1

        events {
    
    
          worker_connections   1000;
        }

        http {
    
    
          resolver 127.0.0.11;

          server {
    
    
            listen             3100;

            location = / {
    
    
              return 200 'OK';
              auth_basic off;
            }

            location = /api/prom/push {
    
    
              proxy_pass       http://write:3100\$$request_uri;
            }

            location = /api/prom/tail {
    
    
              proxy_pass       http://read:3100\$$request_uri;
              proxy_set_header Upgrade \$$http_upgrade;
              proxy_set_header Connection "upgrade";
            }

            location ~ /api/prom/.* {
    
    
              proxy_pass       http://read:3100\$$request_uri;
            }

            location = /loki/api/v1/push {
    
    
              proxy_pass       http://write:3100\$$request_uri;
            }

            location = /loki/api/v1/tail {
    
    
              proxy_pass       http://read:3100\$$request_uri;
              proxy_set_header Upgrade \$$http_upgrade;
              proxy_set_header Connection "upgrade";
            }

            location ~ /loki/api/.* {
    
    
              proxy_pass       http://read:3100\$$request_uri;
            }
          }
        }
        EOF
        /docker-entrypoint.sh nginx -g "daemon off;"
    ports:
      - "3100:3100"
    healthcheck:
      test: ["CMD", "service", "nginx", "status"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - loki

  flog:
    image: mingrammer/flog
    command: -f json -n 1000 -l
    networks:
      - loki

4.4.2. loki-config.yaml

---
server:
  http_listen_port: 3100
memberlist:
  join_members:
    - loki:7946
schema_config:
  configs:
    - from: 2021-08-01
      store: boltdb-shipper
      object_store: s3
      schema: v11
      index:
        prefix: index_
        period: 24h
common:
  path_prefix: /loki
  replication_factor: 1
  storage:
    s3:
      endpoint: minio:9000
      insecure: true
      bucketnames: loki-data
      access_key_id: loki
      secret_access_key: supersecret
      s3forcepathstyle: true
  ring:
    kvstore:
      store: memberlist
ruler:
  storage:
    s3:
      bucketnames: loki-ruler

4.4.3. promtail-local-config.yaml

---
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://gateway:3100/loki/api/v1/push
    tenant_id: tenant1

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'

おすすめ

転載: blog.csdn.net/yuchangyuan5237/article/details/132112371