扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行。目前,在大型的后端架构中,一个标准的数据采集方案通常被称为ELK,即ElasticSearch、Logstash和Kibana。为了更轻量级的收集数据,还引用了Filebeat。
所以,我们此次选择Elasticsearch + Logstash + filebeat + Kibana架构来进行演示。
Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点,可用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 使用Java 基于 Lucene 开发,是现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建的。
Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
docker拉取镜像,使用7.10.2版本。
docker pull elasticsearch:7.10.2
创建挂载目录,并给创建的文件夹授权。
mkdir -p /worker/elk/elasticsearch
#文件夹赋权
sudo chown -R 777 /worker/elk/elasticsearch
#这里注意:如果777权限不够,就给1000 : 1000权限
执行docker run脚本
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es 镜像ID
拷贝elasticsearch容器内部的配置到挂载目录
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /worker/elk/elasticsearch/
docker cp es:/usr/share/elasticsearch/data /worker/elk/elasticsearch/
修改elasticsearch.yml
cluster.name: "es-master"
network.host: 0.0.0.0
# 0.0.0.0可表示监听所有IP
http.host: 0.0.0.0
# 跨越请求
http.cors.enabled: true
http.cors.allow-origin: "*"
删除容器
docker rm -f es
再次执行dokcer脚本启动elasticsearch,并设置挂载目录
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es \
--restart=always \
-e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
-h elasticsearch \
-v /worker/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /worker/elk/elasticsearch/data:/usr/share/elasticsearch/data \
-e LANG=C.UTF-8 \
-e LC_ALL=C.UTF-8 \
镜像ID
参数说明:
-p 9200:9200:将容器的9200端口映射到宿主机9200端口
-p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信
--restart=always:docker重启自动启动
-e "discovery.type=single-node":单例模式
-e ES_JAVA_OPTS="-Xms128m -Xmx512m":配置内存大小,最小/大内存
-v 挂载目录
docker拉去镜像,使用7.10.2版本
docker pull kibana:7.10.2
创建挂载目录,并给创建的文件夹授权(与elasticsearch的创建过程类似)。
mkdir -p /worker/elk/kibana
#文件夹赋权
sudo chown -R 777 /worker/elk/kibana
执行docker run脚本
sudo docker run -d --name kibana -p 5601:5601 镜像ID
拷贝kibana容器内部的配置到挂载目录
docker cp kibana:/usr/share/kibana/config /worker/elk/kibana/
docker cp kibana:/usr/share/kibana/data /worker/elk/kibana/
修改kibana.yml配置文件
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
# 显示登陆页面
monitoring.ui.container.elasticsearch.enabled: true
# 语言
i18n.locale: "zh-CN"
删除容器
docker rm -f kibana
再次执行dokcer脚本启动kibana,并设置挂载目录
docker run -d --name kibana -p 5601:5601 \
--restart=always \
--link es:elasticsearch \
-h kibana \
-v /worker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-v /worker/elk/kibana/data:/usr/share/kibana/data \
镜像ID
参数说明:
--link:使用–link参数时,docker会自动在共享两个容器的变量。访问的时候,不再是通过IP的方式来访问,而是通过容器名来访问。上面访问es容器,可以直接elasticsearch:9200可以访问到es容器。
docker拉去镜像,使用7.10.2版本
docker pull logstash:7.10.2
创建挂载目录,并给创建的文件夹授权。
mkdir -p /worker/elk/logstash
#文件夹赋权
sudo chown -R 777 /worker/elk/logstash
创建容器
docker run -p 4560:4560 --name logstash -d 镜像ID
拷贝logstash容器内部的配置到挂载目录
docker container cp logstash:/usr/share/logstash/config /worker/elk/logstash
docker container cp logstash:/usr/share/logstash/pipeline /worker/elk/logstash
docker container cp logstash:/usr/share/logstash/data /worker/elk/logstash
修改logstash.yml的文件的默认配置,配置文件的路径(/worker/elk/logstash/config)
http.host: "0.0.0.0"
#允许监控
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
修改logstash.conf的文件配置,配置文件的路径(/worker/elk/logstash/pipeline),根据具体情况配置
# 监听5044端口作为输入源
input {
beats {
port =>5044
}
}
# 过滤
filter {
grok {
match =>{ "message" =>"%{COMBINEDAPACHELOG}" }
}
date {
match =>[ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
# 输出到es
output {
elasticsearch {
hosts =>["elasticsearch:9200"]
# 索引名称,这里获取filebeat设置的参数
index =>"%{[fields][service]}-%{+YYYY.MM.dd}"
}
stdout {
codec =>rubydebug
}
}
停止并删除容器
docker rm -f logstash
重新启动容器并设置挂载目录
docker run -d \
--name logstash \
-p 5044:5044 \
--restart=always \
-h logstash \
--link es:elasticsearch \
-v /worker/elk/logstash/config:/usr/share/logstash/config \
-v /worker/elk/logstash/pipeline:/usr/share/logstash/pipeline \
镜像ID
进入logstash容器,安装插件
bin/logstash-plugin install logstash-codec-json_lines
docker pull docker.elastic.co/beats/filebeat:7.10.2
然后,执行docker启动脚本。
docker run -d --name filebeat -p 9000:9000 镜像ID
接着,创建filebeat挂载目录,并给创建的文件授权。
mkdir -p /worker/elk/filebeat
sudo chown -R 777 /worker/elk/filebeat
# 将容器内的文件复制到主机上。
docker cp filebeat:/usr/share/filebeat/filebeat.yml /worker/elk/filebeat
修改配置文件filebeat.yml
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
filebeat.inputs:
- type: tcp
enabled: true
# 设置参数
fields:
service: estate
max_message_size: 10MiB
host: "0.0.0.0:9000"
# 输出到logstash
output.logstash:
hosts: ["logstash:5044"]
删除容器
docker rm -f filebeat
接着,修改docker启动脚本,增加-v挂载目录。
docker run -d \
--name filebeat \
-p 9000:9000 \
-h filebeat \
-v /worker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
--restart=always \
--link logstash:logstash \
-e TZ=Asia/Shanghai \
-e output.logstash.hosts=["logstash:5044"] \
镜像ID
springboot项目连接filebeat做日志输出,地址为192.168.189.128:9000 (根据自己ip来),具体可以参考其他文章。
进入kibana页面,地址为http://192.168.189.128:5601/ (根据自己ip来)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9075b03633ad43b48ae15a4dbeb5be6f.jpeg#pic_center输入logstash配置的索引index名称,点击下一步。
看到已经有日志输出。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流