IPMI によって多数のサーバーからセンサー データとイベントを解析する、Python で記述されたスクリプトがあります。次に、グラフ データを 1 つのサーバーに送信し、エラー ログを別のサーバーに送信します。ロギング サーバーは Syslog-ng+Mysql です
そのため、タスクはログを所有者ごとに保存することですが、スクリプト ホストごとには保存しません。
いくつかのコード例:
import logging
import logging.handlers
loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)
loggerCent.addHandler(ce)
loggerCent.warning('TEST MSG')
そのため、ログが他のホストに属していることを syslog-ng に伝えることができるように、コードを拡張する必要があります。または他のデザイン。
何か案は?
更新:
LogAdapter を使用する方法があるようです。しかし、どのように使用できますか:
loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
{'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')
TcpDump を介してメッセージを探しています LoggerAdapter のホストについて何も表示されません。何が間違っていますか?
UPD2:
ホストを syslog-ng に送信する方法が見つかりませんでした。チェーン内の最初のホストを送信することは可能ですが、Python Logging を介して送信する方法が実際には見つかりません。
とにかく、syslog-ng でパーサーを作成しました: CSV Parser
parser ipmimon_log {
csv-parser(
columns("LEVEL", "UNIT", "MESSAGE")
flags(escape-double-char,strip-whitespace)
delimiters(";")
quote-pairs('""[](){}')
);
};
log {
source(s_net);
parser(ipmimon_log);
destination(d_mysql_ipmimon);
};
log {
source(s_net);
destination(d_mysql_norm);
flags(fallback);
};
次に、; で区切られた syslog-ng にログを送信します。