弹性堆栈,我应该如何发送自定义python日志

时间:2019-11-26 09:11:49

标签: logstash elastic-stack

所以我在python中有一些自定义日志记录,它来自多个进程,用于以

格式记录某些崩溃
{timestamp},{PID},{Cause}

现在,我希望将这些事件发送到logstash,并在ELK中使用,以便稍后在我的kibana仪表板上查看一些信息。我以前从未使用过ELK,所以我的问题是,最好的方法是什么?

-使用python-logstash并同时具有2个记录器

-仅在记录日志时将数组发送到logstash(HTTP,我认为吗?),以后再使用Dissect吗?

-当记录器记录该行时生成JSON并将其发送到logstash吗?

1 个答案:

答案 0 :(得分:1)

如果只想发送崩溃信息,那么拥有一个单独的记录器就很方便。

logger.addHandler(logstash.TCPLogstashHandler(host, 5959, version=1)

并配置tcp输入的logstash管道。

input {
    tcp {
        port => 5959
    }
}


filter {
    json {
        source => "message"
    }
}
output {
    elasticsearch {
        hosts => "elasticsearch:9200"
    }
}

要发送类似json的数据,请在python中填充字典,然后使用带有 extra 参数的记录器进行发送。

logger.log(level=logging.WARN, msg="process crashed", extra={'PID':pid, 'Cause': cause})

结果记录看起来像

{ PID:321, Cause:'abcde', timestamp:"2019-12-10T13:37:51.906Z", message:"process crashed" }