elk 8.2.2 集群部署问题

6.27记录

说明:

目前使用得elk版本为8.2.2,kibana、elasticsearch、logstash均为docker部署,连接访问都正常,elasticsearch其他数据正常显示。目前配置为nginx日志收集

解决过程

1、 配置filebeat编码为UTF-8 和GB2312都没解决
2、同时配置logstash编码为UTF-8也没用

logstash配置如下

input {
    tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 5066
        #codec => "json"
        codec => plain{ charset => "UTF-8" }
    }
}

filter {
    json {
        source => "message"
    }
}

output{
    elasticsearch {
        #elastic地址
        hosts => ["https://es01:9200","https://es02:9200","https://es03:9200"]
        action => "index"
        # 写入到es中的索引
        index => "nginx-log-%{+YYYY.MM.dd}"
        user => elastic
        password => "wzsj121233"
        ssl => true
        cacert => "/usr/share/logstash/config/cert/ca.crt"
    }
}

filebeat配置, 只附上更改过的地方

filebeat.inputs:
- type: log
  id: my-filestream-id
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log
  encoding: GB2312
output.logstash:
  hosts: ["192.168.251.212:5066"]

目前所遇到的乱码情况

img

6.28解决记录

调整配置

logstash配置变更如下

input {
    tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 5066
        #codec => "json"
        #codec => plain{ charset => "GB2312" }
    }
}

filter {
    json {
        source => "message"
    }
}

output{
    if "nginx-access-log-212" in [tags] {
        elasticsearch {
            #elastic地址
            hosts => ["https://es01:9200","https://es02:9200","https://es03:9200"]
            #action => "index"
            # 写入到es中的索引
            index => "nginx-access-log-212-%{+YYYY.MM.dd}"
            user => elastic
            password => "wzsj121233"
            ssl => true
            cacert => "/usr/share/logstash/config/cert/ca.crt"
        }
    }

    if "nginx-error-log-212" in [tags] {
        elasticsearch {
            #elastic地址
            hosts => ["https://es01:9200","https://es02:9200","https://es03:9200"]
            #action => "index"
            # 写入到es中的索引
            index => "nginx-error-log-212-%{+YYYY.MM.dd}"
            user => elastic
            password => "wzsj121233"
            ssl => true
            cacert => "/usr/share/logstash/config/cert/ca.crt"
        }
    }

}

filebeat配置如下

filebeat.inputs:
- type: log
  enabled: true
  id: my-nginx-access-212-id
  paths:
    - /usr/local/nginx/logs/access*.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-access-log-212"]
  #encoding: GB2312
- type: log
  enabled: true
  id: my-nginx-error-212-id
  paths:
     - /usr/local/nginx/logs/error*.log
  tags: ["nginx-error-log-212"]
  #encoding: GB2312

output.logstash:
  # The Logstash hosts
  hosts: ["192.168.251.212:5066"]

发几个问题:

1、es中并没有创建nginx-access-log-212-%{+YYYY.MM.dd} 、nginx-error-log-212-%{+YYYY.MM.dd}这两个索引。
2、filebeat的控制台中并没有输出nginx相关的日志信息
filebeat控制台输出内容如下:

img

通过这两个信息,我初步怀疑几点:
1、nginx日志没有读取到(通过之前乱码日志的写入,filebeat与logstash的连接肯定没有问题),但是配置看上去没有任何问题(基于网上资料参考配置的,翻阅了很多资料)。
2、之前的乱码日志就是控制台输出的这些,并不是nginx的日志,控制台中的pipeline/client_worker.go、logstash/async.go、log/log.go不知道在哪里, 也没有哪个文件中有配置同步,但它就是传给logstash了
因此,虽然filebeat和logstash控制台都输出内容了,但并没有创建nginx对应的es索引,所以目前来看,filebeat配置还存在问题

1、首先你得弄清楚,数据本来是不是乱码的
2、接着测试logstash读取出来的是否乱码
从数据源到es一步一步进行往下排查!
具体可以参考:

1.这个kafka里面就是乱码吧,消费一条kafka数据看看是不是乱码
2.filebeat encoding: GB2312改成UTF-8 试试

elk 8.x版本默认开启安全验证, 配置ssl证书后, 一切正常