Почему в поле syslog "message" дублируется? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь переслать сообщения системного журнала в Logstash, а затем в Elasticsearch.

В исходной системе я создал /etc/rsyslog.d/logstash.conf:

*.* action(type="omfwd" target="elk.example.com" port="50513" protocol="tcp")

На elk.example.com конфигурация Logstash очень проста:

input {
  tcp {
    port => 50513
    type => syslog
  }
}

output {
  elasticsearch { hosts => ["localhost:9200"] }
}

После запуска logger hello в исходной системе сообщения, которые я вижу в Kibana:

{
  "_index": "logstash-2019.03.12",
  "_type": "doc",
  "_id": "0DWkcWkB9fKcBjDya4El",
  "_version": 1,
  "_score": null,
  "_source": {
    "host": "domotique.example.com",
    "message": [
      "<13>Mar 12 12:23:14 domotique root: hello",
      "hello"
    ],
    "@timestamp": "2019-03-12T11:23:14.475Z",
    "@version": "1",
    "port": 43752,
    "timestamp": "Mar 12 12:23:14",
    "logsource": "domotique",
    "program": "root",
    "type": "syslog"
  },
  "fields": {
    "@timestamp": [
      "2019-03-12T11:23:14.475Z"
    ]
  },
  "sort": [
    1552389794475
  ]
}

Почему hello дублируется (и добавляется запятая)?

Это само по себе является проблемой. Следствием этого является то, что формат системного журнала не был распознан, но благодаря другому вопросу я добавил

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
    }
  }
}

в качестве фильтра, который решает проблему (см. "syslog_message": "hello" ниже):

{
  "_index": "logstash-2019.03.12",
  "_type": "doc",
  "_id": "fDWtcWkB9fKcBjDynoPf",
  "_version": 1,
  "_score": null,
  "_source": {
    "timestamp": "Mar 12 12:33:17",
    "syslog_pri": "13",
    "type": "syslog",
    "@version": "1",
    "host": "domotique.example.com",
    "logsource": "domotique",
    "program": "root",
    "@timestamp": "2019-03-12T11:33:17.534Z",
    "syslog_program": "root",
    "port": 52636,
    "syslog_message": "hello",
    "syslog_hostname": "domotique",
    "message": [
      "<13>Mar 12 12:33:17 domotique root: hello",
      "hello"
    ],
    "syslog_timestamp": "Mar 12 12:33:17"
  },
  "fields": {
    "@timestamp": [
      "2019-03-12T11:33:17.534Z"
    ]
  },
  "highlight": {
    "syslog_message.keyword": [
      "@kibana-highlighted-field@hello@/kibana-highlighted-field@"
    ],
    "message": [
      "<13>Mar 12 12:33:17 domotique root: @kibana-highlighted-field@hello@/kibana-highlighted-field@",
      "@kibana-highlighted-field@hello@/kibana-highlighted-field@"
    ],
    "syslog_message": [
      "@kibana-highlighted-field@hello@/kibana-highlighted-field@"
    ]
  },
  "sort": [
    1552390397534
  ]
}

Тем не менее: почему сообщение дублируется в первую очередь?

...