技术系列 · 2024年 2月 13日

快速搭建基于elastic+logstash+kibana+filebeat的日志采集可视化服务器方案

因量化策略日志巨大,并且分布在不同服务器上,日常需要不定时查看日志是否有异常情况的需求,但是登录多服务器查看多个程序日志繁琐并且耗时,经过反复查找,最终采用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