参考视频(ElasticStack)https://www.bilibili.com/video/av53652729
(Docker) https://www.bilibili.com/video/av27122140
Docker官网 docker.com
ElasticStack官网 elastic.co -- 有中文
整套跑下来大概需要使用2G以上内存,内存不足的服务器不用试了
整套部署下来需要很清晰的思路,否则极易失败,建议把ElasticStack了解一遍再开始
整个过程为
Filebeat 收集文件 --解析并传输给 -- Logstash --解析并传输给 -- Elasticsearch 建立完整文件模式 -- Kibana关联展示
所需安装包
JDK1.8+ Filebeat7.5.1 + Logstash7.5.1 + ElasticStack7.5.1 + Kibana7.5.1
ElasticStack各组件需要版本统一
首先下载安装Docker.如果不使用docker记得给elasticsearch新建用户后,将新建用户禁止登陆服务器ssh
Docker 安装文档地址 https://docs.docker.com 根据操作系统选择文档
这里选择Linux-Centos,需要先删除已安装Docker,未安装则忽略,删除时可以使用以下命令,按步骤安装即可
apt-get remove docker*
Docker安装好后最好配置一下镜像加速不然很多东西下不动,注册登录阿里云,搜索容器镜像服务-镜像加速器,里面有详细介绍
常规下载方法估计一天也下载不完,在Linux中使用命令下载稍快一些
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz
Docker准备工作,宿主机上安装JDK 上面4个gz安装包,提前编写好的组件配置文件,安装好再改也行,将这些东西放在同一文件夹
构建镜像 下面为Dockerfile 文件内容
FROM ubuntu
MAINTAINER author
EXPOSE 5601
ENV MYPATH=/usr/local
ENV JAVA_HOME=/usr/local/jdk1.8.0_191
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
ENV JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
ENV PATH=$PATH:${JAVA_PATH}
WORKDIR $MYPATH
ADD *.gz $MYPATH
COPY ./conf/* $MYPATH
CMD /bin/bash
docker create | docker run 都可以 末尾接上面构建好的镜像名:版本号,最少映射JDK安装路径与目标日志路径
docker run -it --name mydocker -p 5601:5601 -p 9200:9200 -v /var/local/logs/docker/:/var/local/logs/ -v /usr/local/environment/jdk1.8.0_191/:/usr/local/jdk1.8.0_191/ myesimg:1.0.0
一切顺利的情况下会进入容器/usr/local目录下
Docker容器为最低配linux系统,所以如果需要vi或者其他功能需要安装
下面开始 ElasticStack部分
顺序最好是 Elasticsearch -> Kibana -> Logstash -> Filebeat (此为组件启动顺序)
Elasticsearch
进入ES的目录,修改配置文件,一般单机版而且不需要外围访问的时候不需要修改配置文件
少数改动为cluster.name-node.name-discovery.seed_hosts-cluster.initial_master_nodes 将这些注释放开
启动ES,ES严格控制启动的用户,不允许root用户使用,低版本可以加参数 -Des.insecure.allow.root=true 启动,
(Kibana启动会使用--allow-root)这个参数不知道在ES启动时是否有用
新建用户和组 将ES整个文件夹权限更新为新用户 使用新用户启动 ./elasticsearch -d
启动完成 使用curl localhost:9200查看是否成功
Kibana
Kibana配置文件修改
server.port: 5601 server.host: "0.0.0.0" -表示本机
elasticsearch.hosts: ["http://localhost:9200"] --关联ES
启动 nohup ./kibana --allow-root & 启动完成后在浏览器中访问5601端口查看是否正常
Logstash (重点)
新建java-logstash.conf
input {
beats {
port => 5044
}
}
filter {
# 此处会自动按匹配规则解析message,当然需要符合日志文件的规范以下为 "a : b c d"
grok {
match => { "message" => "%{GREEDYDATA:Timestamp}\ : %{WORD:LogLevel}\ %{GREEDYDATA:ClassName}\ %{GREEDYDATA:TextInformation}" }
}
date {
match => [ "Timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
#根据filebeat传输过来的数据分索引 传递给Elasticsearch
if [log_source] == "aaa" {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "java-aaa-%{+YYYY.MM.dd}"
}
}
if [log_source] == "bbb" {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "java-bbb-%{+YYYY.MM.dd}"
}
}
}
启动: nohup ./filebeat -f java-logstash.conf --config.reload.automatic &
Filebeat (重点)
编辑filebeat.yml
filebeat.inputs:
- type: log
enable: true
paths:
- /var/local/logs/aaa/*.log
fields:
log_source: aaa #自定义字段用于logstash区分来源建索引
fields_under_root: true
multiline: # 将非日期开头的日志向上合并为一条message
pattern: '^(\d{4}-\d{2}-\d{2})'
negate: true
match: after
max_lines: 500
timeout: 5s
- type: log
enable: true
paths:
- /var/local/logs/bbb/*.log
fields:
log_source: bbb
fields_under_root: true
multiline:
pattern: '^(\d{4}-\d{2}-\d{2})'
negate: true
match: after
max_lines: 500
timeout: 5s
output.logstash:
hosts: ["127.0.0.1:5044"]
启动: nohup ./filebeat -e -c ../filebeat.yml &
可以适当调整elasticsearch以及logstash的 jvm.options中的Xms/Xmx属性调整内存值
最后访问kibana
剩下的就是docker commit && docker push了,以后使用的话只需在仓库中pull docker 镜像,进入镜像启动相关组件就可以使用了,也可以从上面镜像为模板再添加RUN 保留字 重新build一个镜像,这样就不需要进入镜像一个一个启动了