流管理器事件到logstash实例

supervisor-logstash-notifier的Python项目详细描述


Build StatusCoveralls Status

这是一个港口 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",
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
序列化反序列化java。awt。颜色>java。木卫一。InvalidClassException   java禁用多个日期范围jDateChooser   java为什么我的特例apper会被扔进泽西/灰熊?   JavaIntelliJ比较两个覆盖率数据   java什么是servletsdefault。你怎么办?   单击几下libgdx后java按钮没有响应   使用java将字符串转换为JSONArray   文件系统在java中刷新fileSystemViewer   java如何在hibernate中避免脏检查   java奇怪的问题,带有分号和“无法解决…”   java将值从子面板传递到父面板   HTML JTextPane CSS的Java FontSizeAction   java文件代码神秘地变成了一堆(0000)