流管理器事件到logstash实例
supervisor-logstash-notifier的Python项目详细描述
这是一个港口 Supervisor-logging 项目。除了捕获日志行之外,正如主管日志记录所做的那样, 还打算捕获 PROCESS_STATE 主管发出的事件。
主管日志存储通知程序
一个supervisor插件,用于将事件和日志流式传输到 logstash实例。
安装
Python2.7或Python3.4+是必需的。
pip install supervisor-logstash-notifier
注意,supervisor本身还不能在python 3上工作,尽管它可以 安装在单独的环境中(因为 主管logstash通知程序是一个单独的过程)。
使用量
要将事件发送到的logstash实例配置为 环境变量:
- LOGSTASH_SERVER
- LOGSTASH_PORT
- LOGSTASH_PROTO
将插件添加为事件侦听器:
# Capture state changes [eventlistener:logging] command = logstash_notifier events = PROCESS_STATE # Capture stdout/stderr [eventlistener:logging] command = logstash_notifier --capture-output events = PROCESS_LOG # Capture state changes and stdout/stderr [eventlistener:logging] command = logstash_notifier --capture-output events = PROCESS_STATE,PROCESS_LOG
如果您不想为整个 shell,您可以通过主管的配置将它们传入:
[eventlistener:logging] environment=LOGSTASH_SERVER="127.0.0.1",LOGSTASH_PORT="12201",LOGSTASH_PROTO="tcp" command=logstash_notifier events=PROCESS_STATE
在程序中启用日志事件:
[program:yourprogram] stdout_events_enabled = true stderr_events_enabled = true
高级使用
也可以在事件消息中包含环境变量, 通过指定要包含的环境变量的名称:
[eventlistener:logging] command=export IPV4=`ec2metadata --local-ipv4`; logstash_notifier --include IPV4 events=PROCESS_STATE
或者,通过指定要记录的任意数据键值:
[eventlistener:logging] command=logstash_notifier --include bears="polar,brown,black" notbears="unicorn,griffin,sphinx,otter" events=PROCESS_STATE
这两种形式的任意用户数据包含可以组合使用 如有必要。
使用logstash运行
logstash可以简单地配置为接收事件:
input { tcp { port => 12201 codec => json } } output { stdout { codec => rubydebug } }
事件和日志输出生成的json如下:
# State changes { "@timestamp": "2016-03-28T23:58:03.469Z", "@version": "1", "eventname": "PROCESS_STATE_STOPPED", "from_state": "STOPPING", "groupname": "myprocess", "host": "ip-10-93-130-24", "level": "INFO", "logger_name": "supervisor", "message": "PROCESS_STATE_STOPPED collectd", "path": "/path/to/supervisor-logstash-notifier/logstash_notifier/__init__.py", "pid": "1234", "processname": "myprocess", "tags": [], "type": "logstash" } # Log output { "@timestamp": "2016-03-28T23:58:03.741Z", "@version": "1", "channel": "stdout" "eventname": "PROCESS_LOG_STDOUT", "groupname": "myprocess", "host": "localhost", "level": "INFO", "logger_name": "supervisor", "message": "myprocess output #1\n", "path": "/path/to/supervisor-logstash-notifier/logstash_notifier/__init__.py", "pid": "1234", "processname": "myprocess", "tags": [], "type": "logstash", }