Prometheus / Loki / Grafanaによるシステムの監視設定 (第1部)
現在のデジタル化の世界において、情報システムはほとんどすべての生活やビジネスの側面で欠かせない役割を果たしています。Webアプリケーション、オンラインサービス、データベース、ネットワークインフラに至るまで、そのすべてです。したがって、システムのパフォーマンスと信頼性を確保することは、あらゆる企業の運営において非常に重要な要素です。安定したシステムは業務効率を向上させ、企業の製品に対するユーザーエクスペリエンスを改善します。監視システムを構築することにより、すべてがコントロール下にあり、問題が発生した際に迅速に対応できることが保証されます。それでは、監視システムを構築しない場合の影響や、Prometheus、Loki、Grafanaを使った監視モデルの設定方法について、以下の記事を通じて見ていきましょう。
システム監視がない場合のリスクと影響
監視がないシステムは、多くのリスクに直面し、その結果、組織の品質やパフォーマンスに悪影響を与えます。監視システムを導入しない、または効果的に機能しない場合に直面する可能性のあるいくつかの問題を以下に示します。
パフォーマンスの低下と潜在的な障害
監視システムがなければ、システムのパフォーマンスに影響を与える潜在的な問題を認識することはできません。パフォーマンスに関連するデータを追跡して記録する仕組みがなければ、「処理速度が遅い」、「リソースの使用が過剰」、「応答時間が長くなる可能性」などの問題を正確に検出することが困難です。このような問題は予期しない障害を引き起こし、業務を中断させることもあります。
予測と計画能力の欠如
監視システムがなければ、将来的な問題を予測するためのデータが得られず、計画を立てることも困難です。監視データは、システムのパフォーマンスの成長や変化の傾向を明確にするのに役立ちます。この情報が欠けていると、リソースの計画、インフラの拡張、最適化が難しくなり、リソースの浪費や迅速な対応計画の障害を引き起こす可能性があります。
調査と修復の能力の欠如
障害が発生した場合、データがなければ原因の特定と修復が困難になります。障害前後のシステムの動作に関する情報が不足していると、根本原因の特定と修復に必要な時間が増加し、調査に不必要な時間がかかることになります。これにより、顧客満足度や企業の評判に悪影響を及ぼす可能性があります。
監視とアラートの欠如
監視されていないシステムでは、即座に介入する必要がある重要な状況を見逃す可能性があります。監視指標(メトリック)を追跡するためのアラート機能やダッシュボードがない場合、リソース不足、セキュリティ問題、予期しないリスクなどの問題が早期に検出されないまま発生する可能性があります。これにより、システムの安定性やセキュリティに深刻な影響を与えることがあります。
Prometheus, Loki, Grafana: システム監視のためのソリューション
上記のリスクを解決するために、Prometheus、Loki、Grafanaなどの監視ツールの使用が不可欠です。これらのツールは、パフォーマンスデータ、ログの収集、情報の可視化を自動化することにより、システムの状態と動作に関する包括的な視点を提供します。
これらのツールを組み合わせて監視システムを設定することにより、企業は予測能力、障害対応能力、セキュリティ問題の追跡と検出能力を向上させることができます。
Prometheusとは?
Prometheusは、システム監視へのアプローチを変革したオープンソースプロジェクトです。さまざまなソースからシステムのパフォーマンスと耐障害性に関するデータを収集できる能力を持ち、柔軟で正確な方法でシステムを監視し、分析することを可能にします。
Prometheusは、システムリソース、アプリケーション、およびその他のコンポーネントに関するメトリックを収集します。これらのパラメータは、アラートの生成、統計の作成、およびシステムの進行状況を監視するためのグラフに使用されます。
Prometheusは、タイムスタンプとともにメトリックのデータを時系列データとして保存し、オプションでkey – valueペアを追加できます。このペアはラベルと呼ばれ、データのフィルタリングに使用されます。
Lokiとは?
システム監視においてもう一つ重要な要素は、ログの監視です。Lokiは、Prometheusから派生したプロジェクトで、システムのログの収集、トレース、分析に焦点を当てています。
Lokiは、さまざまなソースからのログを効率的に検索、フィルタリング、トレースできるように設計されています。PrometheusとLokiを組み合わせることで、企業はシステムのメトリックとログの両方を把握でき、システムの状態に関する詳細な視点を得ることができます。
Grafanaとは?
データを監視し、収集することは重要ですが、それを企業が理解できる有益な情報に変換するのはGrafanaの役目です。
Grafanaは、データを視覚化するための強力なプラットフォームです。これにより、サーバーから収集されたデータとメトリックを使って、ダッシュボードやグラフを作成し、情報を視覚的に効率的に表示できます。
Prometheus、Loki、Grafanaを組み合わせることで、企業は統合されたダッシュボードを作成し、システムの状態を全体的に把握でき、セキュリティのリスクや潜在的な問題を簡単に識別できる強力なシステムを構築できます。
システム監視モデルの展開
このガイドの範囲では、以下の情報源を監視する基本的なシステム監視のセットアップを行います:
- サーバーのCPU使用率
- サーバーのメモリ使用率
- sshdプロセスの監視
- /var/log/messagesシステムログ
- Cronジョブのログ
使用するツール:
- Prometheus: サービスやアプリケーションのメトリックを収集・視覚化するツール
- Loki: システムログとクエリ
- Grafana: データを視覚的なインターフェースに変換するツール
- Node Exporter: メトリック収集ツール
- Promtail: ログの形式設定ツール
- デモサーバーの構造
サーバー名 | サーバーIP | 構成 | 使用ツール |
監視対象サーバー | 192.168.88.233 | OS: Centos8 Ram: 2GB CPU: 2Core | ・Node Exporter ・Process Exporter ・Promtail |
監視サーバー | 192.168.88.206 | OS: Centos8 Ram: 2GB CPU: 2Core | ・Grafana ・Loki ・Prometheus |
サーバー監視のセットアップ手順
1. 監視対象サーバーの設定
Node Exporter、Process Exporter、Promtailなどの必要なツールをインストールします。
最新バージョンを以下からダウンロードします:Prometheus
# ソースをダウンロードするためのフォルダーを作成 $ mkdir /usr/local/src/prometheus # 作成したソースフォルダーに移動 $ cd /usr/local/src/prometheus # ソースファイルをダウンロード $ wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz # ダウンロードしたファイルを解凍 $ tar zxvf node_exporter-1.6.1.linux-amd64.tar.gz $ mv node_exporter-1.6.1.linux-amd64.tar.gz node_exporter # /usr/binに保存 $ cp -r node_exporter /usr/bin
起動スクリプトを作成します。
# 起動スクリプトを作成
$ vi /usr/lib/systemd/system/prometheus-node-exporter.service
prometheus-node-exporter.serviceの内容は次の通りです:
[Unit] Description=Node Exporter Documentation=https://github.com/prometheus/node_exporter [Service] Type=simple ExecStart=/usr/bin/node_exporter/node_exporter $OPTIONS Restart=always [Install] WantedBy=multi-user.target
サービスを起動し、動作を確認します。
# デーモンを再読み込み $ systemctl daemon-reload # サービスの自動起動設定 $ systemctl enable prometheus-node-exporter.service # サービスを起動 $ systemctl start prometheus-node-exporter.service # サービスのステータスを確認 $ systemctl status prometheus-node-exporter.service
結果を確認します。
# APIを呼び出して確認
$ curl 192.168.88.233:9100/metrics
結果は次のように正しいです。
最新バージョンを以下からダウンロードします:Process Exporter
# ソースをダウンロードするためのフォルダーを作成 $ mkdir /usr/local/src/process-exporter # 作成したソースフォルダーに移動 $ cd /usr/local/src/process-exporter # ソースファイルをダウンロード $ wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz # ダウンロードしたファイルを解凍 $ tar zxvf process-exporter-0.7.10.linux-amd64.tar.gz $ mv process-exporter-0.7.10.linux-amd64 process-exporter # /usr/binに保存 $ cp -r /usr/local/src/process-exporter/process-exporter /usr/bin # プロセスエクスポーター用の設定ファイル用フォルダを作成 $ mkdir /etc/process-exporter # 設定ファイルを作成 $ vi /etc/process-exporter/config.yml
設定ファイルの内容は以下の通りです:
process_names: - cmdline: - .+
起動スクリプトを作成します。
$ vi /usr/lib/systemd/system/process-exporter.service
process-exporter.serviceの内容は次の通りです:
[Unit] Description=Process Exporter Documentation=https://github.com/ncabatoff/process-exporter [Service] Type=simple ExecStart=/usr/bin/process-exporter/process-exporter \ -config.path /etc/process-exporter/config.yml [Install] WantedBy=multi-user.target
サービスを起動し、動作を確認します。
# デーモンを再読み込み $ systemctl daemon-reload # サービスの自動起動設定 $ systemctl enable process-exporter.service # サービスを起動 $ systemctl start process-exporter.service # サービスのステータスを確認 $ systemctl status process-exporter.service
サービスの状態が正しく表示されれば、インストールが成功です。
APIを呼び出して結果を確認します。
# APIを呼び出して確認
$ curl 192.168.88.233:9256/metrics
結果は次の通りです。
最新バージョンを Grafana/Loki からダウンロードしてインストール
# ソースをダウンロードするためのフォルダーを作成 $ mkdir /usr/local/src/promtail # 作成したソースフォルダーに移動 $ cd /usr/local/src/promtail # ソースの圧縮ファイルをダウンロード $ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.4/promtail-linux-amd64.zip" # ダウンロードしたファイルを解凍 $ unzip "promtail-linux-amd64.zip" # ファイルに実行権限を付与 $ chmod a+x promtail-linux-amd64 # /usr/bin に保存 $ cp -r /usr/local/src/promtail/promtail-linux-amd64 /usr/bin
設定ファイル promtail-local-config.yaml をダウンロード
# 設定ファイルをダウンロードするためのフォルダーを作成 $ mkdir /etc/promtail # 作成したフォルダーに移動 $ cd /etc/promtail # 設定ファイルをダウンロード $ wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
設定ファイル promtail-local-config.yaml を適切に編集
- 監視サーバーからの情報をプッシュするサーバーのIPを更新(監視サーバーのIPは 192.168.88.206)
- システムログとcronジョブログを収集できるように設定:
/var/log/messages と /var/log/crond - 設定ファイル /etc/promtail/promtail-local-config.yaml を以下のように変更
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yam clients: - url: http://192.168.88.206:3100/loki/api/v1/push scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/messages - job_name: cron static_configs: - targets: - localhost labels: job: cronlogs __path__: /var/log/cron
起動スクリプトの作成
$ vi /usr/lib/systemd/system/promtail.service
スクリプト promtail.service の内容は以下の通り
[Unit] Description=Promtail Documentation=https://github.com/grafana/loki/releases/ [Service] Type=simple ExecStart=/usr/bin/promtail-linux-amd64 \ --config.file=/etc/promtail/promtail-local-config.yaml [Install] WantedBy=multi-user.target
サービスを再起動し、結果を確認
# リロードと起動
$ systemctl daemon-reload
$ systemctl enable promtail.service
$ systemctl start promtail.service
$ systemctl status promtail.service
サービスの状態が以下のように表示されることを確認
APIで結果を確認
# APIを使って確認
$ curl 192.168.88.233:9080/targets
結果は以下の通りです
ブラウザ(Chrome)でPromtailが動作していることを確認:リンク
http://192.168.88.233:9080/targets
パート1終了
* パート2では、サーバー監視の設定方法について説明します。引き続き記事をお楽しみに!
![]() | Phan Văn Liền ウェブ開発者 |