coopdevs.monitoring_role

モニタリングロール Ansible Role

Grafanaエコシステムのモニタリングツールを管理するためのAnsibleロールです。

Dockerを使用してPrometheusとLokiエクスポーターをインストールします:

  • nodeexporter: ホストの状態に関する一般データを収集するPrometheusエクスポーター。
  • postgresexporter: PostgreSQLサーバーの状態を監視するPrometheusエクスポーター。
  • promtail: Lokiの主要なエクスポーターで、Prometheusに似たログサーバーであり、Grafanaと互換性があります。

このロールは以下のアプリケーションのデフォルトログ形式をサポートしています:

さらに、システム内のアクティブユーザーを公開するカスタムエクスポーターもサポートしています。

このロールの使用

公開変数

NodeExporter

# defaults/main.yaml
monitoring_nexporter_enabled: true
monitoring_nexporter_host: 127.0.0.1
monitoring_nexporter_port: 9100
monitoring_nexporter_docker_bind: "127.0.0.1:127.0.0.1:9100"
monitoring_nexporter_container_name: nexporter
monitoring_nexporter_image_version: latest

PostgresqlExporter

monitoring_postgres_exporter_enabled: true
monitoring_postgres_exporter_pg_user: "monitor_user"

Promtail

# defaults/main.yaml
monitoring_promtail_enabled: true
monitoring_promtail_host: 127.0.0.1
monitoring_promtail_port: 9080
monitoring_promtail_docker_bind: "127.0.0.1:127.0.0.1:9080"
monitoring_promtail_container_name: promtail
monitoring_promtail_image_version: latest

monitoring_promtail_modules_enabled:
  - "app2"

monitoring_promtail_modules_available:
  app1:
    log_path: "/var/log/app1/error.log"
    template: "app1.j2"
  app2:
    log_path: "/opt/app2/log/app2.log"
    template: "app2.j2"

monitoring_promtail_config_dir: "/etc/promtail"
monitoring_promtail_config_filename: "config.yml"

アクティブユーザー

monitoring_users_enabled: true
monitoring_users_host: 127.0.0.1
monitoring_users_port: 9839
monitoring_users_endpoint: "/metrics"
monitoring_users_prefix: "what"
monitoring_users_with_timestamp: false
monitoring_users_scrape_interval: 5000

秘密変数

Promtail

monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"

PostgresqlExporter

monitoring_postgres_exporter_pg_password: "3%hyZ&toNZ#Xn74"
monitoring_postgres_exporter_pg_port: "3456"

例のプレイブック

Odooとpromtail

# playbooks/odoo-promtail.yml
---
- name: Odooとログ監視をインストール
  hosts: servers
  become: yes
  roles:
    - role: coopdevs.odoo_role
    - role: coopdevs.monitoring_role
      vars:
        monitoring_nexporter_enabled: false
        monitoring_promtail_enabled: true
        monitoring_promtail_modules_enabled: [ "odoo" ]
        monitoring_loki_user: "1234"
        monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
        monitoring_loki_hostname: "logs-somewhere.grafana.net"

PostgreSQLとシステムメトリクス

# playbooks/postgres-nexporter.yml
---
- name: システムメトリクスを公開したデータベースサーバーをインストール
  hosts: servers
  become: yes
  roles:
    - role: geerlingguy.postgresql
    - role: coopdevs.monitoring_role
      vars:
        monitoring_nexporter_enabled: true
        monitoring_promtail_enabled: false

セキュリティ

このロールはHTTPサーバーを介して多くのデータを公開しており、悪用される可能性があります。デフォルトでは、インターネットから公開されないループバックアドレスをリッスンします。

ただし、外部のPrometheusサーバーが定期的にこのデータを取得することを望むかもしれません。この目的のために、Prometheusサーバーからホストへの認証が必要です。

一つのアプローチは、エクスポーターをlocalhostにバインドし、その前にBasic Authenticationを使用してリバースプロキシを設定することです。この設定と関連キーの管理はこのロールの範囲外です。

拡張

Prometheusエクスポーターを追加する

新しいPrometheusエクスポーターを追加するには:

  1. Node Exporterからdefaults/main.ymlセクションをコピーし、すべてのnexporter用語を自分のものに変更します(例:someexporter)。
  2. Node Exporterからtemplates/monitoring-docker-compose.yml.j2セクションをコピーし、名前を変更して必要に応じて調整します。
  3. meta/main.ymlを調整:タグを追加し、必要に応じて説明を変更します。
  4. README.mdを更新します。

新しいアプリのためのPromtailモジュール

まだサポートされていないアプリの互換性を追加するには:

  1. monitoring_promtail_modules_availableに宣言します。ログパスはアプリによって異なり、ここで設定したテンプレート名になります。
  2. templates/promtail-config-apps/odoo-role.j2を同じディレクトリにコピーし、ファイル名をnew-app.j2に変更します。
  3. テンプレートをアプリに応じて編集します。公式ドキュメントを確認してください(こちら)。
  • 正規表現を確認するにはregexrの「サーバーモード」またはregex101.comを利用できます。 明確さのためにいくつかのログエントリのコメントを含めると、将来の正規表現リーダーに役立ちます。
  • labelsステージを設定して、Lokiにエクスポートされるラベルをすべての収集されたものから定義します。
  • timestampステージを設定して、Promtailが収集した時間ではなく、実際の日時でログ行にタイムスタンプを付けます。
    • 可能であればミリ秒を含めてください。Golangは小数点区切りとして「.」のみを理解します。アプリが「,」を使用している場合は問題があります。 Golangの問題#6189を参照してください。
    • 解析を通じてタイムゾーンを含めるか、手動で(backups-role.j2のように)または(odoo-role.j2のように)設定します。
  • 必要に応じて、正規表現に合致しないエントリーを取り除くためのmatchステージを含めても良いです。
プロジェクトについて

Install Prometheus and Loki exporters to monitor your project instances

インストール
ansible-galaxy install coopdevs.monitoring_role
ライセンス
Unknown
ダウンロード
22.4k
所有者
Coopdevs, Free and Open Source Software for Social and Solidarity Economy.