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でビジュアライゼーションを作成する方法については、ダッシュボードのドキュメントを参照してください:
このアプローチのメリット
-
軽量: ELKのような複雑なスタックのオーバーヘッドを回避。
-
カスタマイズ可能: Pythonパーサーをカスタマイズして、ニーズに最も適したメトリクスを抽出します。
-
スケーラブル: 小規模なセットアップにも大規模なインフラにも適しています。
まとめ
このセットアップを完了することで、生のシステムログを構造化されたリアルタイムのメトリクスに変換する強力なパイプラインが構築されます。無限のログ行を手動でふるいにかける代わりに、SSHログイン、cronジョブ、システムイベントなどの重要なアクティビティをGraphiteダッシュボードから直接監視できるようになりました。これにより、完全なELKスタックの複雑さ(またはコスト)なしに、システムの健全性を即座に可視化することができます。
DevOpsの役割において、ログを観測できることは、単にあれば良いということではなく、非常に重要です。ログをメトリクスとして監視することで、障害をより早く発見し、疑わしい活動をより早く検出し、インシデント対応を自動化することができます。これにより、事後的なトラブルシューティングから積極的なシステム管理へと移行することができます。なにより、このアプローチは、インフラ予算を圧迫することなく、1台のサーバーから全フリートまで拡張できるほど軽量です。
もっと詳しく知りたいですか?今すぐお問い合わせください。