21世紀においてスケーラブルで安全、そして実際に役立つログ設定を目指しています。私たちの強力なトリオをご紹介します:
- Fluentd: ログ収集の万能ツール
- Vector: 新たな注目株で、Fluentdに挑戦中
- Loki: 「ログがメトリクスのようにクールだったら?」というGrafanaの答え
ステップ1: Syslogに別れを告げる(泣かないで、これが最善です)
まず最初に、Syslogを手放す準備をしましょう。以下のチェックリストで準備が整っているか確認してください:
- すべてのSyslogソースをインベントリ化する
- カスタムの解析やルーティングルールを特定する
- 現在のSyslog設定をバックアップする(念のため)
- チームに通知する(そしてピザを注文するかも—変化は食べ物と共にあると良い)
ステップ2: Fluentdのセットアップ - ログの万能選手
Fluentdはこのログの冒険の最初のステップです。これが素晴らしい理由は:
- 多様な入力と出力プラグインをサポート
- 構造化データと非構造化データを巧みに処理
- 軽量でC言語で書かれている(プラグインはRuby)
Fluentdをセットアップしましょう:
# Fluentdをインストール(Debian系システムを想定)
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh
# Fluentdサービスを開始
sudo systemctl start td-agent
次に、Fluentdを以前のSyslogクライアントからのログを受け入れるように設定します:
@type syslog
port 5140
tag system
@type forward
send_timeout 60s
recover_wait 10s
hard_timeout 60s
name loki_server
host 10.0.0.1
port 24224
この設定は、Fluentdにポート5140でSyslogメッセージを受信し、それをLokiサーバーに転送するよう指示します。簡単ですよね?
ステップ3: Vector - 新たな注目株
Fluentdも素晴らしいですが、Vectorは新たな注目株です。非常に高速で、CPUとメモリの使用量が少なく、設定も簡単です。Vectorを追加しましょう:
# Vectorをインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | sh
# Vectorを開始
sudo systemctl start vector
次に、VectorをFluentdと連携させるように設定します:
[sources.syslog]
type = "syslog"
address = "0.0.0.0:514"
mode = "tcp"
[transforms.parse_syslog]
type = "remap"
inputs = ["syslog"]
source = '''
. = parse_syslog!(.message)
'''
[sinks.loki]
type = "loki"
inputs = ["parse_syslog"]
endpoint = "http://10.0.0.1:3100"
encoding.codec = "json"
labels = {job = "vector_logs"}
この設定は、VectorにSyslog入力を受け入れ、解析し、Lokiに送信するよう指示します。Fluentdのようですが、少しエネルギッシュです。
ステップ4: Loki - ログがスターになる場所
Lokiはログのパズルの最後のピースです。Prometheusのようですが、ログ用で、Grafanaと非常に相性が良いです。セットアップしましょう:
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2020-05-15
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /tmp/loki/index
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
この設定は、FluentdとVectorからのログを受け入れるようにLokiを設定します。ログが集まるクールなクラブのようです。
グランドフィナーレ: すべてをまとめる
すべてのピースが揃ったので、この美しいログのシンフォニーがどのように機能するか見てみましょう:
- アプリケーションはFluentdまたはVector(または両方)にログを送信します
- FluentdとVectorはログを解析、変換し、Lokiに転送します
- Lokiはログを効率的に保存し、クエリ可能にします
- Grafanaを使用して、美しいダッシュボードやアラートを作成します
これで、ログのフリップフォンから最先端のスマートフォンへと進化しました。ログは構造化され、検索可能で、実際に役立つものになりました。さらに、「ログ集約」や「可観測性パイプライン」といったフレーズで同僚を驚かせることができます。
結論: 未来へのログ
SyslogからFluentd、Vector、Lokiを使った現代的で集中化されたログソリューションへの移行は大変に思えるかもしれませんが、その利点は計り知れません。パフォーマンスが向上し、スケーラビリティが改善され、必要なときにログの中の針を見つけることができるようになります。
千のログの旅は一つの設定ファイルから始まります。勇敢なロガーよ、ログが常にあなたの味方でありますように!
「ログがないことよりも悪いのは、理解できないログを持っていることです。」 - すべてのDevOpsエンジニア
さて、私はログを解析しに行きます。ハッピー・ロギング!