Table of Contents
Great systems are not just built. They are monitored.
MetricFire runs Graphite and Grafana as a fully managed service for growing engineering teams, taking care of storage, scaling, and version updates so your team doesn't have to. Plans start at $19/month, billed per metric namespace rather than per host, and include engineer-staffed support. Integrations work natively with Heroku, AWS, Azure, and GCP, and data is stored with 3× redundancy in SOC2- and ISO:27001-certified data centres.
はじめに
Graphiteでの監視は、シンプルで階層的な命名システムを使用しており管理しやすいため、Prometheusよりも簡単であることがよくあります。また、そのストレージモデルは複雑な設定なしで長期的なデータ保持を目的として設計されており、履歴データが重要な場合に最適です。PrometheusのメトリクスをGraphiteに変換することで、監視を単一の一貫した形式に統一でき、複数のシステムを扱う煩雑さを軽減できます。
本記事では、Prometheusのメトリクスをエンドポイントにエクスポートする方法と、Telegrafを設定して、それらを収集・変換し、Graphiteのデータソースへ転送する方法について詳しく解説します。
Telegrafエージェントの開始
Telegrafは、InfluxDBを基盤としたプラグイン駆動型のサーバーエージェントで、データベース、システム、プロセス、デバイス、アプリケーションからメトリクスやイベントを収集・送信します。Goで記述されており、外部依存のない単一のバイナリとしてコンパイルされ、必要なメモリ使用量も非常に少なく抑えられています。多くのオペレーティングシステムに対応しており、さまざまなシステムパフォーマンスメトリクスを収集・転送するための便利な入力プラグイン・出力プラグインが多数用意されています。
Telegrafのインストール(Linux/RedHat)
/etc/telegraf/ にインストールされます。wget https://dl.influxdata.com/telegraf/releases/telegraf_1.30.0-1_amd64.deb
sudo dpkg -i telegraf_1.30.0-1_amd64.deb
RedHat/CentOS
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.30.0-1.x86_64.rpm
sudo yum localinstall telegraf-1.30.0-1.x86_64.rpm
出力の設定
Telegrafは、Kafka、Graphite、InfluxDB、Prometheus、SQL、NoSQLなど、さまざまな出力先に設定することができます。
この例では、Graphiteへの出力を設定します。もしデータソースを自分でホスティングしていない場合は、次の手順を進めるために、MetricFireのHosted Graphiteの14日間無料トライアルを開始してください。
Hosted Graphiteアカウントでは、データソースの提供に加え、アラート機能や可視化ツールとしてのHosted Grafanaも利用できます。
Graphiteの出力を設定するには、ダウンロードした設定ファイル /etc/telegraf/telegraf.conf を見つけて、好みのテキストエディタで開きます。その後、以下の変更を行います。
次の行のコメントを外します:
[[outputs.graphite]]
serverの行のコメントを外して、以下のように編集します:
servers = ["carbon.hostedgraphite.com:2003"]
最後に、prefixの行のコメントを外して以下のように編集します:
prefix = "<YOUR_API_KEY>.telegraf"
または、別のデータソースにメトリクスを転送するように、別のTelegraf出力を設定することも可能です。
Prometheusメトリクスの生成
この例では、Redisが広く使われており扱いやすいデータベースサービスであるため、Linux(ubuntu20.04)環境で redis_exporter を使用してPrometheusのメトリクスを生成します。さらに、同様のPrometheusメトリクスのエクスポートは、HAProxy、MySQL、PostgreSQL、Apacheなど、多くの一般的なサービスでも設定可能です。本記事では、すでに redis-server のインスタンスが稼働していることを前提としていますが、まだの場合でも簡単にインストールできるため、この例に沿って進めることができます。
- redis_exporterのダウンロードと設定:
- wget https://github.com/oliver006/redis_exporter/releases/download/v1.44.0/redis_exporter-v1.44.0.linux-amd64.tar.gz
- 展開してシステムパスへ移動:
- tar -xvf redis_exporter-v1.44.0.linux-amd64.tar.gz
- cd redis_exporter-v1.44.0.linux-amd64/
- sudo mv redis_exporter /usr/local/bin/
- redis_exporterの実行:
- /usr/local/bin/redis_exporter --redis.addr=redis://localhost:6379
- 別のターミナルでメトリクス出力を確認(デフォルトポート:9121):
- curl http://localhost:9121/metrics
Telegrafプラグインの設定
Telegrafには、多くの一般的な技術やサードパーティのソースから幅広いデータを収集できる入力プラグインが多数用意されています。この例では、設定済みのメトリクスエンドポイントから redis_exporter のメトリクスをスクレイピングする方法を説明します。これらのPrometheusメトリクスは、その後、先ほど設定したHosted Graphiteのデータソースへ転送される際にGraphite形式へ変換されます。
まず、/etc/telegraf/telegraf.conf ファイル内で inputs.prometheus セクションを検索し、[[inputs.prometheus]] の行のコメントを外します:
[[inputs.prometheus]]
次に、urls の行のコメントを外して設定し、name_prefix を指定します(これによりメトリクスの検索性が向上します):
urls = ["http://localhost:9121/metrics"]
name_prefix = "redis_exporter."
最後に、変更を保存し、以下のコマンドでTelegrafデーモンを実行します。これにより、出力に設定エラーがないか確認できます:
telegraf --config telegraf.conf
その後、Hosted Graphiteアカウントを確認すると、約200個のredis_exporterメトリクスが確認できます。Graphite形式では次のように表示されます:
telegraf.<host>.http:--localhost:9121-metrics.redis_exporter.<metric>.<counter, gauge>
追加の詳細や設定オプションについては、Prometheusプラグインの公式GitHubリポジトリを参照してください。
MetricFireのHosted Graphiteを使用してカスタムダッシュボードとアラートを作成
MetricFireは、サーバー、データベース、ネットワーク、プロセス、デバイス、アプリケーションからメトリクスやデータを収集・可視化・分析できる監視プラットフォームです。これを利用することで、インフラ内の問題を容易に特定し、リソースを最適化することができます。Hosted Graphiteは、監視ソリューションを自分でホスティングする負担を取り除き、より重要な作業に集中するための時間と自由を提供します。
Hosted Graphiteアカウントに登録し、上記の手順に従ってTelegraf Agentでサーバーを設定すると、メトリクスはHosted Graphiteのバックエンドへ転送され、タイムスタンプが付与され、集約されます。
-
メトリクスは次のGraphite形式で送信・保存されます:metric.name.path <数値> <unixタイムスタンプ>
-
ドット表記の形式はツリー状のデータ構造を提供し、効率的なクエリを可能にします。
-
メトリクスはHosted Graphiteアカウントに2年間保存され、カスタムアラートやGrafanaダッシュボードの作成に利用できます。
Hosted Grafanaでダッシュボードを作成
Hosted GraphiteのUIで、Dashboards に移動し、「+ New Dashboard」を選択して新しい可視化を作成します。
その後、編集モードに入り、クエリUIを使ってGraphiteのメトリクスパスを選択します(HGアカウント経由でGrafanaにアクセスしている場合、デフォルトのデータソースはHosted Graphiteバックエンドになります)。
HGのデータソースはワイルドカード(*)検索にも対応しており、指定したパスに一致するすべてのメトリクスを取得できます。
さらに、これらのメトリクスに対してGraphite関数を適用することができます。例えば、aliasByNode() を使ってメトリクス名を再フォーマットしたり、integral() を使って時間経過に伴う累積値を計算することが可能です。
Grafanaには、さまざまな可視化オプション、表示のカスタマイズ、単位設定、さらにダッシュボード変数の設定やイベント注釈といった高度な機能も用意されています。
上記の例では、メトリクスシリーズのインデックス4に対して「instance」というダッシュボード変数が設定されています。詳細についてはHosted Graphiteのダッシュボードドキュメントを参照してください。
Graphiteアラートの作成
Hosted GraphiteのUIで、Alerts ⇒ Graphite Alerts に移動し、新しいアラートを作成します。アラート名を設定し、アラート対象メトリクスのクエリを追加し、このアラートの説明を記述します。
次に、Alert Criteria タブを選択してしきい値を設定し、通知チャネルを選びます。デフォルトの通知チャネルは、Hosted Graphiteアカウント登録時に使用したメールアドレスです。さらに、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなど、さまざまな通知チャネルを簡単に設定することもできます。通知チャネルの詳細については、Hosted Graphiteのドキュメントを参照してください。
まとめ
PrometheusのメトリクスをGraphiteのメトリクスとして監視することで、メトリクスの整理が簡素化され、より管理しやすく理解しやすいシンプルで階層的な命名構造を実現できます。Graphiteのシンプルなクエリ構文と長期的なデータ保持に重点を置いた設計は、履歴トレンドが重要な環境に最適であり、Prometheusのラベルベースのシステムに伴いがちな複雑さを軽減します。Graphiteにメトリクスを集約することで、よりユーザーフレンドリーで一貫性のある監視環境を構築でき、操作や保守が容易になります。
無料トライアルに登録して、今すぐインフラの監視を始めましょう。また、デモを予約して、MetricFireのチームと直接、監視ニーズについてご相談いただくことも可能です。