ログ メトリクス

ログをメトリクスに変換: Loki、Python、Telegrafによるオープンソースの構築(前編)

Table of Contents

はじめに

モニタリングは必ずしも複雑である必要はありません。このガイドでは、ELKスタックを使用せず、最小限の労力で、軽量でオープンソースのセットアップを使用して、生のログを使用可能なメトリクスに変換する方法を紹介します。Loki、Python、Telegrafを使用して、ログをGraphiteメトリクスに変換し、簡単に監視やアラートを出すことができます。システム管理者、DevOps初心者、またはゼロからより革新的なモニタリングパイプラインを構築することに興味がある方に最適です。MetricFireのHosed Graphiteアカウントをまだお持ちでない方は、こちらから14日間の無料トライアルにサインアップしてください。

重要なポイント

  • ログからのメトリクス: ログをメトリクスに変換することで、傾向分析、アラート、可視化が容易になり、詳細なログデータと実用的な洞察のギャップを埋めることができます。

  • 軽量スタック: Loki、Python、Telegrafのようなオープンソースのツールを使用することで、ELKスタックのような大規模なログ管理プラットフォームの複雑さとリソースの要求を回避します。

  • カスタマイズ可能な解析: Pythonスクリプトは、ログがどのように解析され、どのメトリクスが抽出されるかを完全にコントロールすることができます。

  • ブリッジとしてのTelegraf: Telegrafは、カスタムスクリプトを実行し、結果のメトリクスを直接Graphite(またはサポートされている他の出力)に転送することで、プロセスを簡素化します。

  • より良い観察可能性: ログとメトリクスを組み合わせることで、システムの観測性が向上し、異常の早期発見と迅速なインシデント対応が可能になります。

  • コスト効率の良いモニタリング: このセットアップは、コストを大幅に増やしたり、ツールを乱立させることなく、観測可能性を拡大したいチームに最適です。

使用するツールまとめ

  • Loki: Elasticsearch に比べて超軽量な Grafana Labs のログデータベース。

  • Python: ログをメトリクスに解析する小さなスクリプト用のツール。

  • Telegraf: 私たちのスクリプトを実行し、Hosted Graphiteアカウントにメトリクスを転送するメトリクスエージェントです。

Lokiのインストールと設定

LokiはGrafana Labsによって構築されたログ構造化データベースである。これはログのPrometheusのようなもので、生のログコンテンツの代わりにラベルをインデックス化するため、高速で効率的です。このセットアップでは、Lokiをローカルで実行し、ログをディスクに保存し、シンプルなPythonスクリプトを使ってHTTP経由でクエリを実行します。PromtailもElasticsearchもクラウドバケットも必要ありません!

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

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

必要なデータ・ディレクトリを作成し、rootパーミッションを割り当てる:

sudo mkdir -p /tmp/loki/index
sudo mkdir -p /tmp/loki/cache
sudo mkdir -p /tmp/loki/chunks
sudo mkdir -p /tmp/loki/compactor

sudo chown -R root:root /tmp/loki

Lokiを手動で実行し、localhost:3100をリッスンする。

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

シンプルなPythonパーサーを作成

このPythonスクリプトは、/var/log/syslog の最後の500行を読み取り、SSHログインの成功や失敗、sudoコマンドの使用、cronジョブの実行など、一般的なシステムイベントの頻度をカウントします。これらのカウントは、TelegrafがHosted Graphiteアカウントに転送できるGraphiteフォーマットのメトリクスとして出力されます。これは、包括的なロギングスタックを必要とせずに、主要なシステムアクティビティ(ログイン試行やジョブスケジュールなど)を追跡するための軽量な方法を提供します。

新しいPythonファイルを作成するだけです: /etc/telegraf/parse_loki_metrics.py に新しいPythonファイルを作成します。

#!/usr/bin/env python3

import time
import re
from collections import deque

LOG_PATH = "/var/log/syslog"

# Patterns and counters for most common log events
patterns = {
    "logs.sshd.success": r"sshd.*Accepted password",
    "logs.sshd.failure": r"sshd.*Failed password",
    "logs.sudo.command": r"sudo: .*COMMAND=",
    "logs.cron.job": r"CRON\[.*\]:"
}

metrics = {key: 0 for key in patterns}

try:
    with open(LOG_PATH, "r") as f:
        recent_lines = deque(f, maxlen=500)
        for line in recent_lines:
            for metric, pattern in patterns.items():
                if re.search(pattern, line):
                    metrics[metric] += 1

    ts = int(time.time())
    for key, val in metrics.items():
        print(f"{key} {val} {ts}")

except Exception as e:
    print(f"logs.script_error 1 {int(time.time())}  # error: {e}")

スクリプトを実行可能にする:

sudo chmod +x /etc/telegraf/parse_loki_metrics.py

スクリプトを実行するためのTelegrafの設定

Telegrafのインスタンスがまだサーバーで稼動していない場合は、HG-CLIツールをインストールして、素早く簡単にTelegrafを稼動させてください:

curl -s "https://www.hostedgraphite.com/scripts/hg-cli/installer/" | sudo sh

Telegrafの設定ファイルを開いてください: /etc/telegraf/telegraf.confを開き、以下のセクションを追加してください:

[[inputs.exec]]
  commands = ["/etc/telegraf/parse_loki_metrics.py"]
timeout = "15s"
  data_format = "graphite"
name_prefix = "syslog-metrics."

syslogがsudoパーミッションでしかアクセスできない場合は、Telegrafの「commands」ラインを次のように更新する必要があるかもしれません:

  commands = ["/bin/bash -c '/usr/bin/python3 /etc/telegraf/parse_loki_metrics.py'"]

Telegrafサービスを再起動すると、Exec Input PluginがPythonスクリプトを実行し、出力を読み取り、Hosted Graphiteアカウントにデータを転送します。

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

メトリクスの可視化

LokiとTelegrafの両方がサーバーで実行されると、メトリクスはHosted Graphiteアカウントに転送され、Metrics Search UI(prefix: telegraf.syslog-metrics.*付き)で見つけることができます。

これらのメトリクスを使用してHosted Grafanaでビジュアライゼーションを作成する方法については、ダッシュボードのドキュメントを参照してください:

ログをメトリクスに変換: Loki、Python、Telegrafによるオープンソースの構築(前編) - 1

このアプローチのメリット

  • 軽量: ELKのような複雑なスタックのオーバーヘッドを回避。

  • カスタマイズ可能: Pythonパーサーをカスタマイズして、ニーズに最も適したメトリクスを抽出します。

  • スケーラブル: 小規模なセットアップにも大規模なインフラにも適しています。

まとめ

このセットアップを完了することで、生のシステムログを構造化されたリアルタイムのメトリクスに変換する強力なパイプラインが構築されます。無限のログ行を手動でふるいにかける代わりに、SSHログイン、cronジョブ、システムイベントなどの重要なアクティビティをGraphiteダッシュボードから直接監視できるようになりました。これにより、完全なELKスタックの複雑さ(またはコスト)なしに、システムの健全性を即座に可視化することができます。

DevOpsの役割において、ログを観測できることは、単にあれば良いということではなく、非常に重要です。ログをメトリクスとして監視することで、障害をより早く発見し、疑わしい活動をより早く検出し、インシデント対応を自動化することができます。これにより、事後的なトラブルシューティングから積極的なシステム管理へと移行することができます。なにより、このアプローチは、インフラ予算を圧迫することなく、1台のサーバーから全フリートまで拡張できるほど軽量です。


もっと詳しく知りたいですか?今すぐお問い合わせください。

You might also like other posts...
metricfire Jul 08, 2025 · 5 min read

Introducing MetricFire Logging: Visualize Logs Alongside Metrics

By combining logs and metrics in MetricFire's Hosted Grafana, you can troubleshoot faster, spot... Continue Reading

metricfire Jul 01, 2025 · 5 min read

OpenTelemetryを使用してSnowflakeの観測性を高める方法

このガイドでは、OpenTelemetry(contrib)をSnowflakeに統合して、クエリのパフォーマンス、実行時間、キューイング、ストレージの使用率、課金への影響を可視化する方法を説明します。SnowflakeメトリクスをスクレイピングするためのOpenTelemetry Collectorをセットアップし、データをエクスポートするためのエンドポイントを設定し、よくある落とし穴のトラブルシューティングを行います。最後には、クエリとリソースのパフォーマンスに関する実用的な洞察を提供する、Snowflake用のスケーラブルで自動化されたモニタリングの設定ができるようになります。 Continue Reading

metricfire Jun 30, 2025 · 3 min read

Hosted GraphiteでHerokuアドオンを監視する実践ガイド

このガイドでは、Hosted Graphite by MetricFireを使用してHerokuアドオンのカスタムなリアルタイム監視を設定する方法についてご説明します。このブログでは一例として、Heroku Dynosと選択したアドオンからHosted Graphiteバックエンドにパフォーマンスメトリクスを転送する方法を詳しく説明します。 Continue Reading

header image

We strive for 99.999% uptime

Because our system is your system.

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