ELK index_not_found_exception

ELKlogstash 一般都是以日期为单位保存日志,格式如下:

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}
ELK 6.8.3 安装与配置(Windows)

可以在 Elasticsearch 下载中心 下载对应版本的 ElasticsearchLogstashKibana
这里使用的都是 6.8.3 版本。

SpringBoot

直接发送日志到 logstash 地址

ELK 部分日志无法保存的问题

今天突然发现 ELK 中的部分日志无法保存了,只有异常(error)日志可以保存(我们是根据日志 Level 分别创建的索引,每月创建一个索引)。

查了好久终于在比对索引字段类型的时候发现有一个 serverTime 的字段在两个索引中的类型不同,一个是 long 型,一个是 date 型。

"serverTime": {
    "type": "long"
}
Logstash 保存不同类型的日志到各自的 Elasticsearch 索引

Logstash 的配置文件由三部分组成 inputfilteroutput,每个部分都可以包含一个或多个插件设置。

input {
  ...
}

filter {
  ...
}

output {
  ...
}
通过命令行指定 Logstash 配置

在官方 Release 文档 Stashing Your First Event 看到可以通过 -e 参数在命令行中指定配置。

logstash.bat -e 'input { stdin { } } output { stdout {} }'
SpringBoot ELK(Elasticsearch + Logstash + Kibana)日志收集

在 SpringBoot 中通过 logback 输出日志到 RabbitMQ,之后通过 Logstash 收集解析日志输出到 Elasticsearch,最后在 Kibana 中查看收集到的日志。

以下是在 windows 环境下执行的。Linux 上基本上只是启动时执行的文件不同。

RabbitMQ

也可以通过在 logstash 中配置好了 Exchange 之后启动会自动创建 Exchange、Queue 和 Binding。

这里是手动在 RabbitMQ 界面创建。

  • 创建 Exchange

    Name: log_logstash
    Type: topic
    Durability: Durable
    Auto delete: No
    Internal: No

  • 创建队列

    Name: OCT_MID_Log
    Durability: Durable
    Auto delete: No

  • 创建 log_logstash Exchange 的 Binding

    To queue: OCT_MID_Log
    Routing key: service.#