区分多个系统日志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'} } }