特定の rsyslog 入力一致用に MySQL ストレージを設定するにはどうすればよいでしょうか?

特定の rsyslog 入力一致用に MySQL ストレージを設定するにはどうすればよいでしょうか?

私は Heroku から rsyslog Linux (ubuntu) サーバーにさまざまなログを排出していますが、ログ履歴の操作に関しては、手に負えないほど多くの作業を抱え始めています。

標準の syslog ファイルが提供するものよりも柔軟な詳細とアクセスに基づいて、時間を遡ることができる必要があります。

mysql にログを記録するのが正しいアプローチかもしれないと思っていますが、識別に基づいて特定のログ エントリのみをテーブルに取り込むように設定するにはどうすればよいでしょうか。たとえば、特定の Heroku アプリ インスタンスからの各ログ エントリを識別する長い 16 進文字列が表示されます。すべての rsyslog 入力を mysql にパイプするのではなく、それらを mysql ソケットにパイプするだけでよいと思います...

どなたか、このような設定手順を説明してくれるリソースを教えていただけませんか。または、役立つ詳細情報を提供していただけませんか。私は 15 年以上の Unix 経験がありますが、これまでさまざまなサーバーを 1 つにまとめるという点で syslog デーモンを使った膨大な作業を行ったことがなく、正しい方向への導きが必要なだけです。

さらに、開発者にとってこのようなログ構成をより便利に掘り下げることができるログレビュー ツールがあれば興味があります。

答え1

おそらく、これと似たようなものが機能するはずです。まず、rsyslog conf ファイルに以下の行があることを確認し、MySQL 出力モジュールがロードされるようにします。

$ModLoad ommysql

次に、次のように必要なものをフィルタリングします。

:msg, contains, "Heroku"     :ommysql:dbserver,dbname,dbuser,dbpass;heroku-template

次に、データのテンプレートを作成し、rsyslog がデータベースに何をどのように挿入するかを認識できるようにする必要があります。以下は、日付とメッセージのみを記録し、2 つの列のみを持つテーブルがあることを前提としたサンプル テンプレートですdatemessage

$template heroku-template, "INSERT INTO herokulog(date,message) VALUES ('%timestamp','%msg')\r\n", SQL

このようなものが機能するはずです。これは私の思いつきで、まったくテストしていませんが、アイデアは伝わるでしょう。より詳細な情報は以下から入手できます。rsyslog ウェブサイト例えば、利用可能なテンプレートパラメータ値興味があるかもしれません。

答え2

syslog を grep コマンドにパイプして必要な行を抽出し、次に awk スクリプトにパイプして適切にフォーマットされた csv ファイルを生成し、生成された csv ファイルを "LOAD DATA IN FILE" を使用して mysql に取り込みます。

phpsyslog-ng プロジェクトも確認できます:http://www.gdd.net/index.php/PHP-Syslog-NG

関連情報