前言
公司最近使用微服务,此时简单的日志收集已经不再满足我们的需求,而在系统中又使用了Elasticsearch,所以决定使用logstash收集日志,传输到Elasticsearch中,使用Kibana搜索展现日志数据。
Docker 镜像统一从 https://hub.docker.com/ 下载 (安装时请使用统一版本,否则会出现奇奇怪怪的bug)
(我这边使用的版本是7.14.1)
安装Elasticsearch
先正常启动es
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -d elasticsearch:7.14.1
如果需要设置密码,需要在这一步先设置
进入es容器
docker exec -it elasticsearch bash
编辑 config/elasticsearch.yml
添加如下配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
之后重启es
docker restart elasticsearch
再次进入容器后,执行命令:
#可查看设置密码详情
./bin/elasticsearch-setup-passwords -h
#如果不需要自行设置密码,则只需要
./bin/elasticsearch-setup-passwords auto
#如果需要,则
./bin/elasticsearch-setup-passwords interactive
此时密码设置完成。
再将需要的文件夹拷贝到本机上
docker cp elasticsearch:/usr/share/elasticsearch/config /data/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/plugins /data/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/data /data/elasticsearch/
移除临时的es
docker rm elasticsearch
此时再正常启动:
docker run
#名称
--name elasticsearch
#开机重启
-it --restart=always
#暴露端口
-p 9200:9200
-p 9300:9300
#类型,我这边使用的是单节点
-e "discovery.type=single-node"
#内存大小,根据自身情况设置
-e ES_JAVA_OPTS="-Xms4g -Xmx4g"
#挂载data文件夹,索引数据存放的地方
-v /data/elasticsearch/data:/usr/share/elasticsearch/data
#挂载工具文件夹
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins
#挂载配置文件
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
#-d为后台运行
-d elasticsearch:7.14.1
测试是否安装成功
curl 127.0.0.1:9200
如果设置了密码,则命令为:
curl 127.0.0.1:9200 -u 用户名:密码
到此Elasticsearch安装成功。
安装Kibana
步骤和安装Elasticsearch相同,都是先运行初始版本,把需要的文件夹复制出来,最后启动
docker run -d
-it --restart=always
--privileged=true
-p 5601:5601
--name kibana
-v /data/kibana/config:/usr/share/kibana/config
-m 512m
--memory-swap=1024m
kibana:7.14.1
kibana.yml额外配置:
#es地址
elasticsearch.hosts: [ "http://xxx:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
#es用户名
elasticsearch.username: "elastic"
#es密码
elasticsearch.password: "twkj@2021"
#开启kibana中文
i18n.locale: "zh-CN"
安装Logstash
步骤和安装Elasticsearch相同,都是先运行初始版本,把需要的文件夹复制出来,最后启动。
只不过这里我自己新增了一个conf.d文件夹,把配置放在了一起。
此时logstash.yml配置为:
http.host: 127.0.0.1
#配置路径
path.config: /usr/share/logstash/conf.d/*.conf
#日志路径
path.logs: /var/log/logstash
配置完之后删除初始版本,再执行下面的命令:
docker run -d -it
--restart=always --privileged=true -p 5044:5044
--name logstash
#挂载配置文件
-v /data/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
#挂载配置文件夹
-v /data/logstash/conf.d/:/usr/share/logstash/conf.d/
--link elasticsearch:elasticsearch
logstash:7.14.1
conf.d目录中配置示例:
#我这边使用的filebeat抓取日志文件推送至logstash,再由logstash分类存储进入es中
input {
beats {
port => 5044
codec => "json"
}
}
filter {
grok {
#日志输出规范
match => { "message" => "(\s)*%{TIMESTAMP_ISO8601:log_time}(\.[0-9]*)?" }
}
#日志时间
date { match => ["log_time", "yyyy-MM-dd HH:mm:ss.SSS"] target => "@timestamp" timezone => "Asia/Shanghai" }
}
output {
if [fields][source] == "oauth" {
elasticsearch {
#index为自定义索引名称,可以按照自己的习惯进行命名
hosts => ["elasticsearch:9200"] user => "es用户名" password => "es密码" index => "logstash-oauth-%{+YYYY.MM.dd}"
}
}
}
安装Filebeat
步骤和安装Elasticsearch相同,都是先运行初始版本,把需要的文件夹复制出来,最后启动。
docker run -d -it --restart=always --privileged=true
--name filebeat
-v /data/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
#需要抓取的日志目录映射到filebeat中,防止抓取失败
-v /data/server/:/data/server/
--link logstash:logstash store/elastic/filebeat:7.14.1
filebeat.yml配置示例:
filebeat.inputs:
#类型为日志,如果需要更多配置信息,请移步官网
- type: log
paths:
#抓取的文件路径,可以是多个,也可以用*的通配符
- /data/server/oauth/logs/tw-oauth/*.log
fields:
#输送到logstash中的名称,logstash中可以根据名称进行一个分类
source: twoauth
output.logstash:
#logstash路径
hosts: ["logstash:5044"]
至此配置完成。