EFK日志系统搭建
- EFK日志系统介绍
- 功能需求
- 搭建elasticsearch集群
- 规划
- 前提
- 部署
- 核对
- 证书及权限
EFK日志系统介绍
Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。
Beats 是数据采集的得力工具。将 Beats 和您的容器一起置于服务器上,或者将 Beats 作为函数加以部署,然后便可在 Elastisearch 中集中处理数据。如果需要更加强大的处理性能,Beats 还能将数据输送到 Logstash 进行转换和解析。
Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。不仅如此,您还可以使用 Vega 语法来设计独属于您自己的可视化图形。所有这些都利用 Elasticsearch 的完整聚合功能。
Elasticsearch 通常与 Kibana 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 允许你通过 web 界面来浏览 Elasticsearch 日志数据。
注意:由于全篇字稿较长,做了如下拆分
docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)
【EFK日志系统】docker一键部署kibana、es-head
【EFK日志系统】docker一键部署filebeat、metricbeat
【EFK日志系统】在kibana操作索引模板、生命周期、管道等
功能需求
现阶段我们有11台服务器,需要对应用、系统、中间件的日志进行追踪监控,通过filebeat、metricbeat采集,es检索,kibana可视化展示整套流程来监控日志、分析日志
- 一键部署各个服务
- 全流程有密码访问控制
- 日志信息结构化处理,精简日志
- es集群化配置,一主两从,同时接收
搭建elasticsearch集群
规划
ip为假想值
es01:172.23.165.185
es02:172.23.165.186
es03:172.23.165.187
前提
1.在官网查看您想要安装使用的版本,拉取该版本
elasticsearch官网
在服务器执行命令即可,我们这里选取的是7.10.0版本
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0
2.修改内存映射数量
在 /etc/sysctl.conf 文件中添加或修改max_map_count:
vm.max_map_count=262144
退出而后执行
sudo sysctl -p
3.创建网络(所有节点在同一网络)
docker network create es-net
查看该网络下的服务
docker network inspect es-net
部署
首先我们在172.23.165.185合适的位置创建es01文件夹
mkdir es01
cd es01
1.编写docker-compose.yml
version: '3'
services:
elasticsearch:
build:
context: .
dockerfile: Dockerfile
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: elasticsearch
restart: always
environment:
- node.name=es-node-1
- network.publish_host=172.23.165.185
- network.host=0.0.0.0
- discovery.seed_hosts=172.23.165.185,172.23.165.186,172.23.165.187
- cluster.initial_master_nodes=172.23.165.185,172.23.165.186,172.23.165.187
- cluster.name=es-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
#- ./data:/usr/share/elasticsearch/data:rw
#- ./config:/usr/share/elasticsearch/config:rw
#- ./plugins:/usr/share/elasticsearch/plugins:rw
#- ./logs:/usr/share/elasticsearch/logs:rw
ports:
- 9200:9200
- 9300:9300
networks:
- es-net
networks:
es-net:
external: true
2.编写Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.0
#COPY ./elasticsearch.yml /usr/share/elasticsearch/config/
3.一键启动
docker-compose up -d
或者 docker -f docker-compose.yml up -d
执行后docker ps查看容器是否启动且正常
4.copy容器文件
容器正常后执行如下
docker cp -a elasticsearch:/usr/share/elasticsearch/config/ .
docker cp -a elasticsearch:/usr/share/elasticsearch/data .
docker cp -a elasticsearch:/usr/share/elasticsearch/logs .
docker cp -a elasticsearch:/usr/share/elasticsearch/plugins .
5.修改elasticsearch.yml
进入config目录编辑elasticsearch.yml
network.host: 0.0.0.0
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
#xpack.security.transport.ssl.keystore.type: PKCS12
#xpack.security.transport.ssl.truststore.type: PKCS12
6.将Dockerfile的 # 去掉
COPY ./elasticsearch.yml /usr/share/elasticsearch/config/
7.将docker-compose.yml的 # 去掉
- ./data:/usr/share/elasticsearch/data:rw
- ./config:/usr/share/elasticsearch/config:rw
- ./plugins:/usr/share/elasticsearch/plugins:rw
- ./logs:/usr/share/elasticsearch/logs:rw
同时修改image
即注释原先的,新增镜像,“:”前是名字,后是版本号
#image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
image: elasticsearch-7.10.0:test01
然后重新启动
执行docker-compose up -d
然后在其他的服务器上重复这样的操作
只不过需要注意将其中的节点名称和hosts替换
举例
environment:
- node.name=es-node-1
- network.publish_host=172.23.165.185
node.name=es-node-2或者3
network.publish_host=172.23.165.186或者7
核对
可以执行命令或者在浏览器输入url查看集群的健康信息(注意替换你自己的ip)
1.查看单个节点的信息
终端输入:curl -X GET “http://172.23.165.185:9200”
浏览器输入:http://172.23.165.185:9200
2.查看集群节点健康情况
终端输入:curl -X GET “http://172.23.165.185:9200/_cluster/health?pretty”
浏览器输入:http://172.23.165.185:9200/_cluster/health?pretty
3.查看节点状态和信息
终端输入:curl -X GET “http://172.23.165.185:9200/_cat/nodes?v&pretty”
浏览器输入:http://172.23.165.185:9200/_cat/nodes?v&pretty
4.查看集群更详细的信息
终端输入:curl -X GET “http://172.23.165.185:9200/_cluster/state?pretty”
5.查看节点简单的健康视图
终端输入:curl -X GET “http://172.23.165.185:9200/_cat/health?v&pretty”
如果只是看一看玩一玩,至此就可以结束了
证书及权限
进入任意一台es容器执行下列命令
docker exec -it elasticsearch bash
bin/elasticsearch-certutil ca
一路回车
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
一路回车
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
一路回车
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
一路回车
exit退出而后,cd config将p12复制导出来,再将其复制到其他节点的config目录下
(也就是es集群三个节点用的都是这两个.p12文件)
docker cp elasticsearch:/usr/share/elasticsearch/config/elastic-stack-ca.p12 .
docker cp elasticsearch:/usr/share/elasticsearch/config/elastic-certificates.p12 .
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.keystore .
在config目录下设置权限
chmod 755 elastic-stack-ca.p12
chmod 755 elastic-certificates.p12
chmod 755 elasticsearch.keystore
chmod 755 elasticsearch.yml
还记得我们elasticsearch.yml中注释掉的部分吗?
取消注释
执行docker restart elasticsearch
然后进入容器
执行下列命令,切记保存
在任意一个节点执行(推荐自动)
./bin/elasticsearch-setup-passwords auto 自动
./bin/elasticsearch-setup-passwords interactive 交互
至此es集群已经部署完成
现在访问是需要密码登录的
在浏览器输入你刚刚生成的密码即可登录
用户名是elastic
此外你在终端查看信息
需要加上用户名密码
如curl -u elastic:密码 -X GET “http://172.23.165.185:9200/”
感谢支持!!!