Open1

Amazon LinuxでPing統計を取得しGrafana Cloudに送信する

harrythecodeharrythecode

Amazon LinuxでPing統計を取得しGrafana Cloudに送信する手順

この手順では、ping_exporterを使ってPing統計を収集し、Grafana Cloudに送信する方法を説明します。

今回の検証で使用したAMIは「amzn2-ami-hvm-2.0.20221004.0-x86_64-gp2」です。

Amazon Linux上で実施する手順

2. ping_exporterのセットアップ

今回はこちらのオープンソースを使います。

https://github.com/czerwonk/ping_exporter/tree/main

2.1 ダウンロードとインストール

wget https://github.com/czerwonk/ping_exporter/releases/download/1.1.3/ping_exporter_1.1.3_linux_amd64.rpm
sudo rpm -i ping_exporter_1.1.3_linux_amd64.rpm

環境によっては違うパスになるのでwhich ping_exporterコマンドで確認をお願いします。

2.2 権限の設定

sudo setcap cap_net_raw+ep /bin/ping_exporter

2.3 設定ファイルの作成

sudo mkdir /etc/ping_exporter
sudo nano /etc/ping_exporter/config.yml

以下は設定例です。各環境に応じて設定を変えてください:

# List of target hosts (IP addresses or host names) to ping.
targets:
- 8.8.8.8

ping:
  interval: 30s # How often to ping a target?
  timeout:  10s # Timeout for a single ICMP Echo Request

他の設定例は以下から確認できます。

https://github.com/czerwonk/ping_exporter/tree/main

  • デフォルト値
    • pingInterval: Pingを送る間隔(デフォルト5秒)。短くすると負荷増、長くすると遅延。
    • pingTimeout: 応答を待つ時間(デフォルト4秒)。短いとタイムアウト多発、長いと待機時間増加。
    • pingSize: パケットサイズ(デフォルト56バイト)。大きいと負荷増、小さいと軽量。
    • dnsRefresh: DNSレコードの更新間隔(デフォルト1分)。短いと負荷増、長いと情報遅延。
    • dnsNameServer: DNSサーバー指定(デフォルトなし)。未指定の場合、システムデフォルト使用。
    • disableIPv6/IPv4: IPv6/IPv4の解決を無効にする。ネットワーク環境に応じて設定。
    • logLevel: ログの出力レベル(デフォルトinfo)。レベルを上げると詳細なログ。
    • targetFlag: Ping対象のリストを指定。
    • historySize: Ping結果の履歴数(デフォルト10)。大きいと分析向き、小さいとリソース節約。

3. ping_exporterの実行

3.1 サービスファイルの作成

sudo nano /etc/systemd/system/ping_exporter.service

以下の内容を貼り付けます:

[Unit]
Description=Ping Exporter

[Service]
ExecStart=/bin/ping_exporter --config.path /etc/ping_exporter/config.yml

[Install]
WantedBy=multi-user.target

3.2 サービスの開始

sudo systemctl daemon-reload
sudo systemctl start ping_exporter
sudo systemctl enable ping_exporter

3.3 動作確認

curl localhost:9427/metrics

Pingの統計情報が表示されれば成功です。

# HELP ping_loss_ratio Packet loss from 0.0 to 1.0
# TYPE ping_loss_ratio gauge
ping_loss_ratio{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0
# HELP ping_rtt_best_seconds Best round trip time in seconds
# TYPE ping_rtt_best_seconds gauge
ping_rtt_best_seconds{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.05860412216186523
# HELP ping_rtt_mean_seconds Mean round trip time in seconds
# TYPE ping_rtt_mean_seconds gauge
ping_rtt_mean_seconds{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.05893426513671875
# HELP ping_rtt_std_deviation_seconds Standard deviation in seconds
# TYPE ping_rtt_std_deviation_seconds gauge
ping_rtt_std_deviation_seconds{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.0004530584812164307
# HELP ping_rtt_worst_seconds Worst round trip time in seconds
# TYPE ping_rtt_worst_seconds gauge
ping_rtt_worst_seconds{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.060954967498779294
# HELP ping_up ping_exporter version
# TYPE ping_up gauge
ping_up{version="1.1.3"} 1

4. Alloyのセットアップ

4.1 インストール

wget -q -O gpg.key https://rpm.grafana.com/gpg.key
sudo rpm --import gpg.key
echo -e '[grafana]\nname=grafana\nbaseurl=https://rpm.grafana.com\nrepo_gpgcheck=1\nenabled=1\ngpgcheck=1\ngpgkey=https://rpm.grafana.com/gpg.key\nsslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt' | sudo tee /etc/yum.repos.d/grafana.repo

sudo yum update
sudo yum install alloy

キャッシュの関係で1回目の sudo yum update でエラーが発生する可能性があります。その場合は再度実行してみてください。

4.2 設定

sudo nano /etc/alloy/config.alloy

以下の内容を貼り付けます(YOUR_GRAFANA_CLOUD_情報は実際の値に置き換えてください):

logging {
  level = "warn"
}

prometheus.remote_write "grafana_cloud" {
  endpoint {
    url = "https://YOUR_GRAFANA_CLOUD_REGION.grafana.net/api/prom/push"
    basic_auth {
      username = "YOUR_GRAFANA_CLOUD_USERNAME"
      password = "YOUR_GRAFANA_CLOUD_API_KEY"
    }
  }
}

prometheus.scrape "ping_exporter" {
  targets = [{
    job         = "ping_exporter",
    __address__ = "localhost:9427",
  }]

  forward_to = [prometheus.remote_write.grafana_cloud.receiver]
}

prometheus.relabel "ping_metrics" {
  rule {
    source_labels = ["__name__"]
    regex         = "ping_.*"
    action        = "keep"
  }

  forward_to = [prometheus.remote_write.grafana_cloud.receiver]
}

Grafana Cloudは使用したメトリクス量に応じて課金されるため、prometheus.relabel "ping_metrics"のように許可されたメトリクスのみを送信する手段を「Block-All and Whitelist」方式とボクは読んで愛用しています。

4.3 Alloyの起動

sudo systemctl start alloy
sudo systemctl enable alloy

5. デバッグ手順

場合によっては都度configの内容を書き換えてシステムログを確認する必要があります。

  • Alloy Configの変更と適用
sudo nano /etc/alloy/config.alloy
sudo systemctl reload alloy
  • システムログの確認
sudo journalctl -u alloy | less

Grafana Cloud上で実施する手順

1. メトリクスの確認

  1. Grafana Cloudにログインします。
  2. 左側メニューの「Explore」をクリックします。
  3. 以下のクエリを入力して、Pingの統計情報を確認します:
ping_rtt_best_seconds # 最良の往復時間(秒)
ping_rtt_worst_seconds # 最悪の往復時間(秒)
ping_rtt_mean_seconds # 平均往復時間(秒)
ping_rtt_std_deviation_seconds # 標準偏差(秒)
ping_loss_ratio # パケット損失率(0.0から1.0の値)

これで、Amazon LinuxからPingの統計情報を収集し、Alloyを通じてGrafana Cloudで可視化できるようになりました。

注意:Grafana AgentはAlloyに置き換えられました。Alloyは長期的なサポートが予定されている新しいソリューションです。