区分多个系统日志docker源代码
我正在build立一个docker-compose
与几个服务,所有这些都写入到一个通用的syslog
容器/服务…实际上是一个logstash
服务(一个完整的elk
图像事实上)与logstash-input-syslog
插件启用..
种类如下(使用自定义5151
端口,因为默认514
由于权限问题给我一个困难):
服务:
elk-custom: image: some_elk_image ports: - 5601:5601 - 9200:9200 - 5044:5044 - 5151:5151 service1: image: myservice1_image logging: driver: syslog options: syslog-address: "tcp://127.0.0.1:5151" service2: image: myservice2_image logging: driver: syslog options: syslog-address: "tcp://127.0.0.1:5151"
我的问题是如何添加一个字段(一个option
而不是在logging
下),这样logstash
中的每个日志条目最后都有一个字段,其值有助于确定日志是来自service1
还是service2
。
我有种设法使用tag
字段来做到这一点,但信息最终成为消息的一部分,而不是一个单独的字段,我可以在elasticsearch
用于查询。 目前, kibana
显示日志条目如下:
@timestamp:September 26th 2017,12:00:47.684 syslog_severity_code:5 port:53,422 syslog_facility:user-level @version:1 host:172.18.0.1 syslog_facility_code:1 message:<27> Sep 26 12:00:47 7705a2f9b22a [2128 ]:[pid:94 | app:0 | req:4/7] 172.18.0.1(){40variables461字节} [Tue Sep 26 26:00:00:47 2017] GET / api / v1 / apikeys =>生成74字节在5 msecs(HTTP / 1.1 401)2个标题在81个字节(1核心0开关)types:syslog syslog_severity:通知标记:_grokparsefailure _id:AV69atD4zBS_tKzDPfyh _type:syslog _index:logstash-2017.09.26 _score: –
从我也知道,我们不能定义自定义syslog-facilities
因为它们是由syslog RFC预定义的。
谢谢。
结束使用端口复用和基于这个条件添加自定义字段:
docker-compose.yml
elk-custom: image: some_elk_image ports: - 5601:5601 - 9200:9200 - 5044:5044 - 5151:5151 - 5152:5152 service1: image: myservice2_image logging: driver: syslog options: syslog-address: "tcp://127.0.0.1:5151" service2: image: myservice2_image logging: driver: syslog options: syslog-address: "tcp://127.0.0.1:5152"
logstash-conf
input { tcp { port => 5151 type => syslog add_field => {'received_from' => 'service1'} } tcp { port => 5152 type => syslog add_field => {'received_from' => 'service2'} } }