ELK5.5+Filebeat分布式日志系统

最近在用k8s管理项目, 每个容器都会打印自己的日志, 目前的解决方案是用nfs4在线文件系统统一存储, 考虑到性能问题, 还是将日志打印到宿主机, 然后通过elk分布式日志收集. 但如果在每台服务器部署logstash是比较耗资源的, 毕竟是java项目. 好在作者重新用golang写了一套新的采集工具filebeat, 性能更高, 暂用资源也更少, 所以这里在每台服务器部署filebeat采集日志, 然后统一缓存到redis, 而elk所在的服务器通过logstashredis里面取数据, 然后发送给elasticsearch分析, 通过kibana显示

ELK5.5+Filebeat分布式日志系统_第1张图片

此图是盗用别人的, 但能够很好的展示流程, 所以自己就不画了

一. 日志服务器配置

下载二进制文件到/mnt挂在目录

# 进入挂载目录  
cd /mnt
# 创建elk文件夹
mkdir elk

# 下载elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.tar.gz
# 下载kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.1-linux-x86_64.tar.gz
# 下载logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.1.tar.gz

# 分别解压
tar -zxvf elasticsearch-5.5.1.tar.gz
tar -zxvf kibana-5.5.1.tar.gz
tar -zxvf logstash-5.5.1.tar.gz

# 移动到elk目录
mv elasticsearch-5.5.1 elk/elasticsearch
mv kibana-5.5.1 elk/kibana
mv logstash-5.5.1 elk/logstash
1.配置Elasticsearch
# 进入目录(`ES_HOME`所在的目录)
cd /mnt/elk/elasticsearch
# 安装X-Pack
bin/elasticsearch-plugin install x-pack
ELK5.5+Filebeat分布式日志系统_第2张图片
# 编辑配置文件
vi config/elasticsearch.yml
# 头部添加
#################################################
cluster.name: yinnote-elastic
network.host: 127.0.0.1
#################################################

cluster.name 集群的名称
network.host 服务监听地址, 最好设置成本机, 没有必要对外开放
http.port 默认9200
path.logs 默认ES_HOME/logs
path.data 默认ES_HOME/data

# 启动(daemon方式)
bin/elasticsearch -d

配置登录认证, 从5.5版本开始, Shield已经集成到X-Pack, 不需要额外安装

# 配置elastic账号的密码(第一次执行需要输入默认密码 changeme )
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password'
-H "Content-Type: application/json" -d '{
    "password" : "123456"
}'

# 配置kibana账号的密码
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password'
-H "Content-Type: application/json" -d '{
    "password" : "123456"
}'

# 配置logstash_system账号的密码
curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/logstash_system/_password'
-H "Content-Type: application/json" -d '{
    "password" : "123456"
}'

# 生成密钥
bin/x-pack/syskeygen

注意这个密钥的证书只有一个月的时间, 如果想长期使用, 大家可以自己找方法...

# 修改配置文件, 重启
vi config/elasticsearch.yml
# 添加密钥支持
#################################################
xpack.security.audit.enabled: true
#################################################
# 重启Elasticsearch
kill -9 [pid]
bin/elasticsearch -d
ELK5.5+Filebeat分布式日志系统_第3张图片
2.配置Kibana
# 进入目录(KIBABA_HOME所在的目录)
cd /mnt/elk/kibana
# 安装X-Pack
bin/kibana-plugin install x-pack

# 配置文件
vi config/kibana.yml
# 头部添加
#################################################
server.host: "0.0.0.0"
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
#################################################

server.port 对外端口, 默认5601
server.host 对外监听ip, 如果有nginx代理, 可以设置成127.0.0.1
elasticsearch.url es地址, 默认http://127.0.0.1:9200
elasticsearch.username elastic账号
elasticsearch.password elastic密码

# 启动
bin/kibana
ELK5.5+Filebeat分布式日志系统_第4张图片
3.配置Logstash

模式一: 从filebeat获取采集数据

# 进入目录(LOGSTASH_HOME所在的目录)
cd /mnt/elk/logstash
# 创建配置文件
vi client-http.conf
# 添加
#################################################
input {
    beats {
        port => 5044
        codec => "json"
    }
}
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "logstash-nginx-error-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "123456"
    }
    stdout {codec => rubydebug}
}
#################################################

# 启动服务(监听模式, 便于查看数据)
bin/logstash -f client-http.conf

模式二: 从redis获取采集数据

# 创建配置文件
vi client-redis.conf
# 添加
#################################################
input {
    redis {
        host => "127.0.0.1"
        port => "6379"
        key => "filebeat"
        data_type => "list"
        password => "redis的密码"
        threads => 20
    }
}
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "logstash-nginx-error-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "123456"
    }
    stdout {codec => rubydebug}
}
#################################################

# 启动服务(监听模式, 便于查看数据)
bin/logstash -f client-http.conf
ELK5.5+Filebeat分布式日志系统_第5张图片

二. 客户端数据采集配置

# 下载安装
cd /mnt
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.1-linux-x86_64.tar.gz
tar -zxvf filebeat-5.5.1-linux-x86_64.tar.gz
mv filebeat-5.5.1-linux-x86_64 filebeat
# 进入目录
cd filebeat

模式一: 通过RESTful接口发送数据 (同Logstash模式一对应)

# 创建配置文件
vi client-http.yml
# 添加
#################################################
filebeat.prospectors:

- input_type: log
  paths:
    - /mnt/logs/nginx/error.log
  fields:
    feature: nginx-err
  multiline:
    pattern: '^\['
    negate: true
    match: after

output.logstash:
  hosts: ["yinnote.com:5044"]
#################################################
# 启动服务(监听模式, 便于查看数据)
./filebeat -e -c client-http.yml

模式二: 通过Redis接口发送数据 (同Logstash模式二对应)

# 创建配置文件
vi client-redis.yml
# 添加
#################################################
filebeat.prospectors:

- input_type: log
  paths:
    - /mnt/logs/nginx/error.log
  fields:
    feature: nginx-err
  multiline:
    pattern: '^\['
    negate: true
    match: after

output.redis:
  hosts: ["yinnote.com"]
  password: "redis的密码"
#################################################
# 启动服务(监听模式, 便于查看数据)
./filebeat -e -c client-redis.yml

input 相关:
fields 可以自定义多个键值对, 便于在kibana后台筛选日志
multiline 设置多行支持, 对于很多异常日志, 不是单行显示的, 这个让一段报错日志打成一条记录

output 相关:
hosts 指定redis地址, 默认端口是6379, 如果需要指定其他端口, 直接在地址后面加, 如yinnote.com:26379, v5.5版本已经不支持port参数
db 可省略, 默认 0
key 可省略, 默认 filebeat
datatype, 可省略, 默认 list

访问后台

1. 浏览器访问  http://yinnote.com:5601

2. 输入elastic用户和密码即可登录

3. 点击左侧的 discover 菜单, 即可查看日志采集情况

时间比较匆忙, 写得比较简洁, 这里主要是介绍最精简的配置方式部署, 所以很多配置参数没有介绍, 另外关于Elasticsearch集群的部署没有介绍, 后续会专门写一篇.

你可能感兴趣的:(ELK5.5+Filebeat分布式日志系统)