Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Linux】dmesgの内容をリアルタイムに監視・キーワード検知する方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

【Linux】dmesgの内容をリアルタイムに監視・キーワード検知する方法

Linuxでハードウェアの認識状態やネットワークの不穏な挙動を調べるときに使う dmesg コマンド。

起動時のログだけでなく、たまに以下のような「外部からの攻撃や不審な通信か?」と思われるカーネルログが記録されていることがあります。

Plaintext

TCP: Treason uncloaked! Peer XX.XX.XX.XX shrinks window XX Repaired.

(※実際には古いTCPスタックの挙動やパケットロスによるバグの可能性もありますが、見慣れないIPアドレスがあると不気味ですよね)

これらをリアルタイムに監視したいとき、どうすればいいのでしょうか?「/var/log/dmesg を見ても起動時の古い情報しか残っていない…」と悩む人に向けて、正しい監視方法を解説します!

1. なぜ「/var/log/dmesg」には残っていないのか?

まず知っておきたいのが、ログファイルの役割の違いです。

  • /var/log/dmesg システムが「起動した瞬間」のログのみが記録されるファイルです。そのため、日付が古かったり、起動後に発生したイベント(USBの抜き差しやネットワークのログなど)は追記されません。

  • カーネルバッファ: dmesg コマンドが本来見に行っているのは、メモリ上の「カーネルバッファ」というリアルタイムな領域です。

起動後の動的なログをファイルで監視したい場合は、/var/log/dmesg ではなく、rsyslog によって出力されるシステムログ を見る必要があります。

2. リアルタイムに監視する3つのアプローチ

dmesg(カーネルログ)を監視・キーワード指定して検知したい場合、以下の3つの方法が現実的です。

方法①:シンプルに「dmesg -w」や「tail -f」で常時監視する

最も手軽なのは、コマンドのオプションやシステムログを直接流しっぱなしにする方法です。

  • dmesgコマンドのフォワード機能(おすすめ):

    Bash

    dmesg -w
    # または
    dmesg --follow
    

    これを使うと、画面が終了せずに新しいカーネルログがリアルタイムに追記されていきます。

  • システムログを追う: カーネルログは通常 /var/log/messages(Ubuntu等では /var/log/syslog)にも転送されているため、以下でも代用できます。

    Bash

    tail -f /var/log/messages | grep "Treason"
    

方法②:【本命】rsyslogでキーワード指定して自動化する

「特定のキーワードが出たら、別ファイルに切り出したり、アラートを飛ばしたい」という場合は、想定通り rsyslog を使うのが最もスマートです。

/etc/rsyslog.d/ 配下に新しく設定ファイル(例: kernel-alert.conf)を作成し、以下のように記述します。

Plaintext

# 「Treason」という文字が含まれるカーネルログを特定のファイルに隔離する
:msg, contains, "Treason" /var/log/kernel_attack.log

これならシステム側が自動でフィルタリングしてくれるため、無駄なリソースを使わずにスマートにキーワード監視が実現できます。

方法③:cron+リダイレクトで定期出力する

「rsyslogの設定をあまりいじりたくない」という場合の、力技のアプローチです。 以下のようなシェルスクリプトを cron で数分おきに回す方法です。

Bash

#!/bin/bash
# 現在のdmesgの内容をファイルに上書き、または追記してキーワード抽出
dmesg | grep "Treason" > /var/log/dmesg_monitor.txt

ただし、この方法だと「何分前までのログか」の管理(重複検知の防止など)が少し面倒になるため、やはり恒久的に運用するなら方法②(rsyslog)や、ログ監視ツール(LogwatchやHinemos、Zabbixなど)に messages を見せるのが王道です。

まとめ

  • /var/log/dmesg は起動時のみ。リアルタイムなログはメモリ上にある。

  • 画面上でサクッと見たいなら dmesg -w

  • キーワードを指定して自動で検知・隔離したいなら rsyslog でルールを書くのがベスト!

不審なログが気になるときは、ぜひ rsyslogdmesg -w を活用して動向を追ってみてください。

タイトルとURLをコピーしました