因量化策略日志巨大,并且分布在不同服务器上,日常需要不定时查看日志是否有异常情况的需求,但是登录多服务器查看多个程序日志繁琐并且耗时,经过反复查找,最终采用elastic+logstash+kibana+filebeat的方案来可视化日志采集,方便日常日志分析。
以下操作在ubuntu20机器上操作,使用docker完成,好处是:方便部署运维,一旦换机器,分分钟就可以部署完成。记录下操作步骤,下次直接使用。
一、部署docker
直接采用官网推荐安装方式:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
二、部署elastic服务
直接采用docker官方实例,https://github.com/docker/awesome-compose.git
git clone https://github.com/docker/awesome-compose.git
cd awesome-compose/elasticsearch-logstash-kibana/
vim compose.yaml
//修改elastic,logstash, kibana版本为当前最新版本:8.12.1
sudo docker compose up -d
至此,elastic,logstash,kibana 启动起来。
三、修改elastic,kibana权限
sudo docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
sudo docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
测试elastic是否可以正常请求:
curl -k -u elastic https://localhost:9200
注意是https,之前一直试http,花了很多时间,后面排查问题发现是没有SSL 访问的问题。
四、logstash配置
有两处需要修改,
1 、config里的logstash.yml 设置为false,否则需要再配置 SSL 证书。
http.host: "0.0.0.0"
xpack.monitoring.enabled: false
xpack.monitoring.elasticsearch.hosts: [ "https://es:9200" ]
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: 'password'
2、logstash.conf文件,比如直接文件形式如下。
input {
file {
path => "/home/nginx.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["https://es:9200"]
user => "elastic"
password => "password"
ssl_certificate_verification => false
}
stdout {
codec => rubydebug
}
}
sudo docker restart log
sudo docker logs log -f
来查看是否有错误。
四、filebeat安装
//可以直接参考https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html
sudo apt-get update && sudo apt-get install filebeat
sudo systemctl enable filebeat
五、logstash配置filebeat
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["https://es:9200"]
user => "elastic"
password => "b*SrBc"
ssl_certificate_verification => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
action => "create"
}
stdout {
codec => rubydebug
}
}
六、filebeat配置
filebeat安装在收集日志的server上,filebeat.yml配置目录:/etc/filebeat/filebeat.yml,配置例子如下,log改为filestream也可以:
filebeat.inputs:
- type: log
enable: true
id: my-filestream-id
paths:
- /tmp/nginx.log
output.logstash:
hosts: ["127.0.0.1:5044"]
index: "filebeat-fsquant-strategy"
启动filebeat,
sudo filebeat -e
七、elastic面板
http://xx.xx.xx.xx:5601 登录上述的elastic密码和kibana的token后,进入菜单management中的index management可以看到推送的index,然后discover日志,就可以发现推送的日志。
大功告成,记录下。
注意避坑:filebeat旧数据发布完成后,再次启动旧数据将不再发布,需要更新新数据来测试。
如果需要域名访问,则需要搭建nginx反向代理,可参考:https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-22-04