区分多个syslog docker来源

时间:2017-09-26 09:21:48

标签: docker elasticsearch logstash docker-compose syslog

我正在设置一个包含多个服务的docker-compose,所有服务都写入一个公共syslog容器/服务...实际上是一个logstash服务(一个完整的{{ 1}}图像实际上)启用了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中的每个日志条目都以字段结束,其值将有助于确定是否该日志来自logstashservice1

我设法使用service2字段执行此操作,但信息最终成为邮件的一部分,而不是我可以用于tag中的查询的单独字段。 目前,elasticsearch显示日志条目如下:

  

@timestamp:2017年9月26日,12:00:47.684 syslog_severity_code:5   端口:53,422 syslog_facility:用户级别@version:1主机:172.18.0.1   syslog_facility_code:1消息:< 27> Sep 26 12:00:47 7705a2f9b22a [2128]:   [pid:94 | app:0 | req:4/7] 172.18.0.1(){40个461字节的变量} [星期二]   9月26日09:00:47 2017] GET / api / v1 / apikeys => 5中生成74个字节   msecs(HTTP / 1.1 401)81个字节的2个头文件(核心0上有1个交换机)   type:syslog syslog_severity:notice标签:_grokparsefailure   _id:AV69atD4zBS_tKzDPfyh _type:syslog _index:logstash-2017.09.26 _score: -

据我所知,我们无法定义自定义kibana,因为它们是由syslog RFC预定义的。

THX。

1 个答案:

答案 0 :(得分:1)

使用端口多路复用结束并根据以下条件添加自定义字段:

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'}
  }
}