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.
はじめに
セキュリティの脅威は、必ずしも目立つものではなく、システムをクラッシュさせたりアラームを鳴らしたりするとは限りません。むしろ、認証されていないログイン試行の継続的な発生や、ゆっくりとしたブルートフォース攻撃、不明なIPアドレスによる脆弱性スキャンといった形で、静かに忍び寄ることがあります。こうした挙動は、メトリクスに現れる前にログに現れることが多く、ログだけ、あるいはメトリクスだけを監視している場合、全体像の一部を見逃してしまいます。
MetricFireでは、効果的なモニタリングとは、ログとメトリクスを単一の可観測性レイヤーで相関させることだと考えています。たとえば、SSHログイン失敗の急増を確認するだけでも有用ですが、どのIPが関与しているのか、いつアクセスがあったのか、そしてそれらがブロックされたのかまで把握できれば、その情報は具体的なアクションにつながります。これらのイベントを並べて可視化する(不正IPを示すログと、ログイン失敗数を示す時系列メトリクス)ことで、文脈と明確さの両方が得られます。その結果、インシデント対応の迅速化、フォレンジック分析の強化、そしてより安全なインフラ運用につながります。
本記事では、こうした脅威を監視するために、Puppetの証明書署名サーバーにTelegrafとPromtailをインストールした手順を紹介します。Fail2Banを使用してログから悪意のあるSSHの挙動を検出し、リアルタイムで攻撃元をブロックしました。その後、生成されたログデータをHosted Lokiに送信し、対応するTelegrafメトリクスをGrafanaに転送して可視化しています。その結果、システムを防御するだけでなく、「何が起きているのか」「なぜ起きているのか」を理解できるセキュリティ可観測性の基盤を構築しました。
MetricFireの新しいログ連携機能を無料でお試しになりたい方は、ぜひ画面右下のチャットマークからお問い合わせください。データ収集から可視化まで、すべてのステップをサポートいたします。
ステップ1:サーバーにログコレクターをセットアップ
MetricFireでは、OpenTelemetry Contrib および Promtail によるログ収集をサポートしています。本例では、Grafana Lokiの公式ログ転送エージェントであるPromtailの設定方法を詳しく説明します。Promtailは軽量なバイナリとして動作し、ログファイル(例:/var/log/syslog)を監視(tail)して、HTTP経由で当社のHosted Lokiエンドポイントへ転送します。
Promtailのインストール/展開(Ubuntu)
wget https://github.com/grafana/loki/releases/download/v3.5.3/promtail_3.5.3_amd64.deb
sudo dpkg -i promtail_3.5.3_amd64.deb || sudo apt-get -y -f install
Promtailをログ転送用に設定
Promtailの設定ファイル /etc/promtail/config.yml を以下のように更新してください。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: https://<YOUR-API-KEY>@www.hostedgraphite.com/logs/sink
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost
labels:
host: <HOST-NAME>
job: varlogs
__path__: /var/log/fail2ban.log
注:上記の設定では、YOUR-API-KEY と HOST-NAME を必ず置き換えてください。その後、Promtailサービスを再起動します。
sudo systemctl restart promtail
sudo systemctl status promtail
また、Promtailが /var/log 配下のファイルを読み取れるように、権限の付与が必要になる場合があります。
sudo usermod -aG adm promtail
sudo systemctl restart promtail
ステップ2:Fail2Banプラグインを使ってサーバー上のTelegrafを設定
Fail2Banとは?
Fail2Banは、ログを解析する侵入防止システムです。ログファイルを監視し、ブルートフォース攻撃やその他の悪意ある挙動(例:SSHログインの繰り返し失敗)を示すパターンを検出します。そして、不正なIPアドレスをブロックするためにファイアウォールを動的に更新します。もしサーバーにFail2Banがまだ導入されていない場合、以下の手順で簡単にインストールして起動できます(Ubuntu)。
sudo apt install fail2ban -y
sudo service fail2ban status
初期設定のままでも、Fail2Banは以下のようなサービスを監視します。
-
sshd(SSHサーバー)
-
nginx/apache(Webアクセスログ)
-
postfix/dovecot(メールサーバー)
-
vsftpd(Very Secure FTP Daemon)
Telegrafコレクターのセットアップ
もしサーバー上でTelegrafがまだ動作していない場合は、HG-CLIツールをインストールすることで、Telegrafを素早く設定できます。
curl -s "https://www.hostedgraphite.com/scripts/hg-cli/installer/" | sudo sh
注:Hosted GraphiteのAPIキーを入力し、どのサービスからメトリクスを収集するかの選択プロンプトに従う必要があります。
インストールが完了したら、Telegrafの設定ファイル /etc/telegraf/telegraf.conf を開き、以下のセクションを追加してください。
[[inputs.fail2ban]]
use_sudo = true
その後、Telegrafサービスを起動するか、手動で実行してエラーがないか出力を確認できます。
telegraf --config /etc/telegraf/telegraf.conf
ステップ3:Hosted GraphiteアカウントでLokiデータソースを設定
新しいログ機能を無料でお試しになりたい場合は、ぜひお問い合わせください。Hosted Graphiteアカウント内にLokiアクセスキーを作成いたします。まだHosted Graphiteアカウントをお持ちでない場合は、無料トライアルに登録して、Hosted GraphiteのAPIキーおよびLokiアクセスキーを取得してください。
Hosted GraphiteのUI内で、以下の手順で操作します:
Dashboards → Settings → Data sources → Add New Data source(Loki)
その後、以下のように新しいLokiエンドポイントのURLを追加できます(Lokiアクセスキーを含みます)。
https://www.hostedgraphite.com/logs/<UID>/<LOKI-ACCESS-KEY>
ステップ4:GrafanaでFail2Banログを可視化
システムログがLokiエンドポイントに転送され、Hosted Grafanaでデータソースが接続されると、新しいダッシュボードパネルを作成できます。データソースとしてLokiを選択し、「コードモード」でクエリを記述します。以下は、サーバーのfail2ban.logメッセージを表示し、どのIPがブロックされたかをパネルに表示するクエリ例です。
{host="HOST-NAME", filename="/var/log/fail2ban.log"} |~ `Ban (?P<ip>[0-9\\.]+)` | regexp `Ban (?P<ip>[0-9.]+)`
以下は、これらのブロックされたIPと、syslogに記録されたSSHログイン失敗を比較するための別のクエリ例です。
注:Lokiは、正規表現フィルタリング、行の解析、フィールド抽出などに対応した強力なLogQL構文をサポートしています!
ステップ5:Grafanaで対応するFail2Banメトリクスを可視化
次に、Telegrafによって収集された対応するFail2Banメトリクス(HostedGraphiteのデータソースを使用)を使って、別のパネルを作成できます。これをfail2ban.logのパネルと並べて表示することで、実際のログデータに現れる攻撃の兆候とメトリクスのパターンを関連付けて確認できます。以下は、サーバーから転送されたFail2Banメトリクスを表示するクエリ例です。
groupByNode(telegraf.$host.sshd.fail2ban.*, 3, 'average')
- telegraf.$host.sshd.fail2ban.failed は、Fail2Banによって検出されたSSHログイン失敗回数を示し、ブルートフォース攻撃や設定ミスのあるクライアントの可能性を可視化します。
- telegraf.$host.sshd.fail2ban.banned は、繰り返しログインに失敗した結果として実際にブロックされたIPアドレス数を示し、不審なアクセス元に対してFail2Banが自動的に対処していることを表します。
- Graphiteの groupByNode() 関数は、共通のパスを持つ関連メトリクスを集約し、「合計値」などの単一の値としてまとめることができます。
まとめ
ログとメトリクスを並べて可視化することで、DevOpsエンジニアは「検知」から「理解」へと進むことができます。メトリクスからは「何が起こったか:WHAT」(利用停止件数の急増や経時的な傾向)が分かり、ログからは「なぜそうなったか:WHY」(IPアドレス、タイムスタンプ、エラーの詳細)が分かります。これにより、異常な挙動を即座に検知し、その原因を特定するための生データをもとにトラブルシューティング、レポート作成、または自動対応へとつなげることができます。Fail2Banのようなサービスは単体でも強力ですが、Hosted Graphite、Telegraf、Promtail/Lokiといった可観測性スタックと組み合わせることで、DevOpsチームが信頼できるリアルタイムのセキュリティダッシュボードの一部となります。
Grafana上でログとメトリクスを統合することで、トラブルシューティングのスピードが向上し、パターンの発見が容易になり、パフォーマンス問題やシステムイベントの文脈をより深く理解できます。複数のツールを行き来したり、サーバーログを手動で確認したりする必要はなく、単一のダッシュボード上でメトリクスの急増とそれに対応するログの内容を関連付けて確認できます。
MetricFireのLokiベースのログ統合は、セットアップが簡単でありながら実運用でも強力に機能します。セキュリティ脅威の監視、サービスの再起動、ジョブの失敗、カーネルの異常など、さまざまなユースケースにおいて必要な可視性を提供し、問題の早期発見と解決までの時間短縮に貢献します。アラート機能の追加、構造化ログの解析、高度なGraphiteメトリクスの活用など、さらなる拡張をご検討の場合もぜひご相談ください。MetricFireチームとともに、より優れた環境を構築していきましょう。