Lokiのパフォーマンス監視を簡単に実現するTelegraf活用法

Lokiのパフォーマンス監視を簡単に実現するTelegraf活用法

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.

はじめに

Lokiは、Grafanaによって開発された強力かつスケーラブルなログ集約システムであり、ログを効率的に収集、保存、検索するために設計されています。現代的なオブザーバビリティスタックの一部として、Prometheusと組み合わせて導入されることが多くあります。Lokiはメタデータのみをインデックス化する設計を採用しており、コスト効率の高いストレージを実現しているため、大規模なログ環境に適した選択肢です。

しかし、Lokiはログ取り込みやインデックス作成に優れている一方で、多くのチームはLoki自体を監視するという重要な作業を見落としています。Loki自身のパフォーマンス、例えば取り込みレート、クエリ遅延、キャッシュ効率、リソース使用率などを可視化できなければ、ボトルネックの検知や、ユーザーへ影響が出る前の障害予防が難しくなります。

本記事では、Telegrafエージェントを使用してLokiのパフォーマンスメトリクスを収集・変換し、無料のデータソースへ転送する方法を詳しく解説します。

Telegrafエージェントの始め方

Telegrafは、InfluxDB上に構築されたプラグインベースのサーバーエージェントであり、データベース、システム、プロセス、デバイス、アプリケーションからメトリクスやイベントを収集・送信します。Go言語で書かれており、外部依存なしの単一バイナリとしてコンパイルされるため、必要なメモリ使用量も非常に少なく抑えられています。Telegrafは多くのOSに対応しており、幅広いシステムパフォーマンスメトリクスを収集・転送できる便利な入力プラグイン出力プラグインを多数備えています。

Telegrafのインストールと設定は簡単ですが、我々はHG-CLIツールによってこのプロセスをさらに簡素化しました。任意のOSへツールをインストールし、TUIモードで実行してHosted Graphite APIキーを入力するだけで、素早くTelegrafを起動できます。

  • HG-CLIツールをインストール:
curl -s "https://www.hostedgraphite.com/scripts/hg-cli/installer/" | sudo sh
  • TUIモードで実行:
hg-cli tui

まだHosted Graphiteアカウントをお持ちでない場合は、無料トライアルへ登録してHosted Graphite APIキーを取得してください。

また、別のデータソースへメトリクスを転送したい場合は、別のTelegraf出力設定を構成することも可能です。

Lokiのインストールと設定(Linux)

最近の安定版であるLokiバージョン2.9.4をダウンロードします。

sudo wget https://github.com/grafana/loki/releases/download/v2.9.4/loki-linux-amd64.zip -O /usr/local/bin/loki.zip

    unzipユーティリティを使ってパッケージを展開し、バイナリを準備します。

    cd /usr/local/bin

    sudo unzip loki.zip
    sudo mv loki-linux-amd64 loki
    sudo chmod +x loki

    ログの取り込み、保存、提供方法をLokiへ指示するため、基本設定を行います。/etc/loki/loki-config.yaml に新しい設定ファイルを作成してください。

    auth_enabled: false

    server:
      http_listen_port: 3100

    ingester:
      lifecycler:
        ring:
          kvstore:
            store: inmemory
          replication_factor: 1

    schema_config:
      configs:
        - from: 2024-01-01
          store: boltdb-shipper
          object_store: filesystem
          schema: v13
          index:
            prefix: index_
            period: 24h

    storage_config:
      boltdb_shipper:
        active_index_directory: /tmp/loki/index
        cache_location: /tmp/loki/cache
        cache_ttl: 24h
      filesystem:
        directory: /tmp/loki/chunks

    limits_config:
      max_entries_limit_per_query: 5000

    table_manager:
      retention_deletes_enabled: true
      retention_period: 24h

    compactor:
      working_directory: /tmp/loki/compactor

    設定ファイルを保存したら、以下のデータディレクトリを作成します。これらのディレクトリは設定ファイル内のパスと一致しており、Lokiは起動時に不足ディレクトリを自動作成しないため、この手順は必須です。

    sudo mkdir -p /tmp/loki/index /tmp/loki/cache /tmp/loki/chunks /tmp/loki/compactor
    sudo chown -R root:root /tmp/loki

    Lokiの起動とテスト

    Lokiを手動で起動し、エラーがないか出力を確認します。

    sudo /usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml

    別のターミナルウィンドウで、Lokiが正常状態か確認します。

    curl -s http://localhost:3100/ready

    /metrics エンドポイントがメトリクスを返していることも確認します。

    curl -s http://localhost:3100/metrics | head -n 25

    また、Loki用のsystemd設定を作成すれば、バックグラウンドで自動起動させることもできます。ただし、この例ではLokiをそのまま実行した状態にして、別ターミナルで次の手順へ進めば問題ありません。

    以下のログ取り込み負荷テストループをターミナルで実行し、Lokiをテストします。

    while true; do
      ts=$(($(date +%s%N)))
      log="Stress log $(date) $(shuf -i 1-1000000 -n 1)"
      curl -s -XPOST "http://localhost:3100/loki/api/v1/push" -H "Content-Type: application/json" \
        -d '{"streams":[{"stream":{"job":"loki","level":"info"},"values":[["'"$ts"'", "'"$log"'"]]}]}' > /dev/null
      sleep 0.005
    done

    TelegrafのPrometheus入力プラグインを設定

    Telegrafには、多くの一般的な技術やサードパーティソースから幅広いデータを収集できる多数の入力プラグインがあります。この例では、Lokiが http://localhost:3100/metrics へメトリクスを公開しています。これらはPrometheus形式のメトリクスであり、Hosted Graphiteデータソースへ転送する際にGraphite形式へ変換する必要があります(Hosted Graphiteは前の手順で設定済みです)。

    まず、Telegrafの設定ファイル(通常は /etc/telegraf/telegraf.conf にあります)を開き、以下のセクションを追加してください。

      [[inputs.prometheus]]
        urls = ["http://localhost:3100/metrics"]
        metric_version = 2
        name_prefix = "loki-performance."

      その後、変更を保存し、以下のコマンドでTelegrafデーモンを実行します。これにより、出力内容から設定エラーがないか確認できます。

      telegraf --config /etc/telegraf/telegraf.conf

      これで、Telegrafはローカルの /metrics エンドポイントをスクレイピングし、これらのメトリクスをHosted Graphiteアカウントへ転送するようになります。アプリのMetrics UI内で、loki-performance プレフィックス付きメトリクスを確認できます。

      Lokiのパフォーマンス監視を簡単に実現するTelegraf活用法 - 1

      Prometheus入力プラグインに関する追加情報や設定オプションについては、公式GitHubリポジトリをご参照ください。

      MetricFireを使ってカスタムダッシュボードとアラートを作成

      MetricFireは、サーバー、データベース、ネットワーク、プロセス、デバイス、アプリケーションからメトリクスやデータを収集・可視化・分析できる監視プラットフォームです。MetricFireを利用することで、インフラ内の問題を簡単に特定し、リソースを最適化できます。MetricFireのHosted Graphiteは、監視ソリューションを自前でホスティングする負担を取り除き、より重要な作業に時間と集中力を使えるようにします。

      Hosted Graphiteのアカウントを作成し、上記の手順でTelegraf Agentをサーバーに設定すると、メトリクスはHosted Graphiteバックエンドへ転送・タイムスタンプ付与・集約されます。

      1. メトリクスは次のようなGraphite形式で送信・保存されます:metric.name.path <numeric-value> <unix-timestamp>

      2. このドット記法形式はツリー構造のデータ形式を提供するため、効率的なクエリ実行が可能です。

      3. メトリクスはHosted Graphiteアカウント内に2年間保存され、これらを使ってカスタムアラートやGrafanaダッシュボードを作成できます。

      Hosted Grafanaでカスタムダッシュボードを作成

      Hosted Graphite UIで「Dashboards」に移動し、「+ New Dashboard」を選択して新しい可視化を作成します。

      その後、編集モードに入り、Query UIを使ってGraphiteメトリクスパスを選択します(HGアカウント経由でGrafanaへアクセスしている場合、デフォルトのデータソースはHostedGraphiteバックエンドになります)。

      HGデータソースは、指定したパスに一致するすべてのメトリクスを取得するためのワイルドカード(*)検索にも対応しています。

      さらに、aliasByNode() を使ってメトリクス名を整理したり、exclude() を使って特定パターンを除外したりといったGraphite関数を適用できます。

      Lokiのパフォーマンス監視を簡単に実現するTelegraf活用法 - 2

      Grafanaには、さまざまな可視化オプション、表示設定、単位設定に加え、ダッシュボード変数イベント注釈設定などの高度な機能も用意されています。

      本番環境レベルのLoki Performanceダッシュボードは、次のような構成になります。

      Lokiのパフォーマンス監視を簡単に実現するTelegraf活用法 - 3

      Graphiteアラートを作成

      Hosted Graphite UIで「Alerts」→「Graphite Alerts」に移動し、新しいアラートを作成します。アラート名を設定し、アラート対象メトリクスのクエリを入力し、このアラートの説明(任意)を追加します。

      その後、「Alert Criteria」タブで閾値を設定し、通知チャネルを選択します。デフォルトの通知チャネルはHosted Graphiteアカウント登録時に使用したメールアドレスです。ただし、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなどのチャネルも簡単に設定できます。これにより、メトリクス値が期待範囲を外れた際に通知を受け取れます。

      詳細については、Hosted Graphiteのドキュメントにある「Alerts」と「Notification Channels」をご参照ください。

      まとめ

      Lokiのネイティブ /metrics エンドポイントと、TelegrafのPrometheus入力プラグインを組み合わせることで、複雑なPrometheus環境を構築することなく、完全なLoki監視ソリューションを構築できます。これにより、Lokiの取り込みレート、クエリレイテンシ、キャッシュ効率、メモリ使用量をリアルタイムで可視化できます。このアプローチは、開発環境から本番環境までスムーズにスケールでき、さらにHosted Graphiteに組み込まれているアラート機能や可視化ツールを使って簡単に拡張することも可能です。

      無料トライアルに登録して、今すぐインフラ監視を始めましょう。また、デモを予約して、監視ニーズについてMetricFireチームへ直接ご相談いただくことも可能です。

      You might also like other posts...
      metricfire May 19, 2026 · 3 min read

      アラートノイズを削減する:Graphiteにおけるメトリクス命名のベストプラクティス

      本記事では、Graphiteでアラートノイズを削減するためのメトリクス命名ベストプラクティスを解説。サービスレベルグループ化、ワイルドカード設計、シグナル構造化によって、よりスケーラブルで保守しやすい監視を実現する方法をご紹介します。 Continue Reading

      metricfire May 15, 2026 · 3 min read

      アラートノイズを削減する:Graphiteにおける複合アラートと条件付きロジックの活用

      サービスレベルのアラート機能は、関連するシグナルを1つのシステムビューに集約することで、不要なアラートを削減します。複合アラート機能は、その基盤の上に、各シグナルの相互作用を定義することで、個別のメトリクスの変化ではなく、システム全体の意味のある動作を反映したアラートを実現します。 Continue Reading

      metricfire May 12, 2026 · 3 min read

      アラートノイズを削減する:Graphiteワイルドカードによるサービスレベル監視

      本記事では、Graphiteワイルドカードを活用してアラートノイズを削減する方法を解説。サービスレベルでメトリクスをグループ化し、Hosted GraphiteやGrafanaで効率的かつスケーラブルな監視・アラート設計を実現するベストプラクティスをご紹介します。 Continue Reading

      header image

      We strive for 99.95% uptime

      Because our system is your system.

      14-day trial 14-day trial
      No Credit Card Required No Credit Card Required