架构解析
总结
kibana面对用户量时,可以配置nginx进行负载均衡,分发访问日志的请求
架构:nginx + 2台kibana+keepalived高可用
企业 实用的ELK集群实战,下期还有Kafka消息队列的加入,高吞吐量的ELK日志集群
链接:https://blog.csdn.net/weixin_56903457/article/details/119865036?spm=1001.2014.3001.5502
pdf免费文档:https://download.csdn.net/download/weixin_56903457/21427005?spm=1001.2014.3001.5503
Elasticsearch
简介:存储来自filebeat、logstash的日志、会被序列化为JSON格式存储,进行分析日志及搜索。
支持的数据类型
结构化文本 => 相当于RDBMS(数据库管理系统,结构化的SQL)
非结构化文本 => 相当于NOSQL(非关系型数据库) Key/Value
数字数据
地理空间数据 => 根据IP来判断地理位置
一、单机部署Elastic
版本:7.x RPM包
🥇参考官方手册official:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/rpm.html#rpm-repo
💯百度网盘:
链接:https://pan.baidu.com/s/1mTd80InP5NKv_xhCdrPUJw 提取码:help
环境:ela1:192.168.178.24
注意:关闭 firewalld、selinux
1. 下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 2. 配置安装的yum源:vim /etc/yum.repos.d/es.repo [elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 3. 安装elastic:yum -y install elasticsearch 4. 运行elastic自启动项:systemctl daemon-reload systemctl enable elasticsearch.service 5. 启动elastic:systemctl start elasticsearch 6. 查看端口:ss -anpt|grep -E '9200|9300' LISTEN 0 128 :::9200 LISTEN 0 128 :::9300 7. 测试完毕后停用elastic:systemctl stop elasticsearch #方便后面的集群使用
ES集群
原理:
高可用性
服务的可用性 => 允许其他节点暂停服务,集群部署。
数据的可用性 => 即使一台出现故障,数据也不会丢失,因为其他节点有备份。
可扩展性
用户的访问量,做集群分发请求到每个节点
Elastic分布式架构的好处
冗余的存储 => 实现存储的扩容
集群部署 => 提高系统的高可用性
Elastic分布式架构
不同的集群用不同名字进行区别
通过配置文件修改对应的集群节点名
一个集群可以有一个或多个节点
集群中的节点角色
Master-eligible Node => 被选举出来的master
分片技术
提高数据的读写速度、性能、数据可用性
主分片 => 将数据分布到集群的所有节点,实现读写速度
副本 => 用于解决数据的可用性,每个Node将自己的数据分到其他Node
🥇集群架构:filebeat (一次收集日志)+ logstash(二次收集) + 3台elasticsearch(存储) + kibana(展示)
端口:logstash 5044 elastic 9200|9300 kibana 5601
版本:7.x RPM包
🌍环境:ela1:192.168.178.24 ela2:192.168.178.25 ela3:192.168.178.26
二、集群部署Elastic
ela1
#接着上面的单机部署 #======================= ela1 ========================= -------------Ntp--------------- 1. 安装ntp服务器进行对表:yum -y install ntp 配置文件:vim /etc/ntp.conf server 127.127.1.0 #本地回送地址 restrict 192.168.178.24(本机IP) #允许本机使用 restrict 0.0.0.0 mask 255.255.255.0 #允许其他网络使用 重启服务:systemctl restart ntpd 2. DNS域名解析:vim /etc/hosts 192.168.178.24 ela1 192.168.178.25 ela2 192.168.178.26 ela3 3. 编写配置文件(.yaml): vim /etc/elasticsearch/elasticsearch.yml ------------------------------------- 找到 cluster.name: elk #elk为集群名,集群中其他Node需配置一样 node.name: ela1 #自定义Node名,与域名解析一样即可 network.host: 0.0.0.0 #监听的地址,为哪些Node服务,这里代表所有 http.port: 9200 #对外服务的端口 discovery.seed_hosts: #自动发现的Node - ela1 #第一个Node填DNS解析名 - 192.168.178.25:9200 #第二个Node填Ip:port - 192.168.178.26 #第三个Node只需填IP cluster.initial_master_nodes: ["ela1", "ela2", "ela3"] #master为谁,如果master宕机了,就选后面的 添加 node.data: true #该节点是否是数据节点 ture > 是数据节点 false ------------------------------------------ 4. 拷贝hosts给其他Node:scp -r /etc/hosts ela2:/etc/hosts scp -r /etc/hosts ela3:/etc/hosts 5. 拷贝yum配置:scp -r /etc/yum.repos.d/es.repo ela2:/etc/yum.repos.d/ scp -r /etc/yum.repos.d/es.repo ela2:/etc/yum.repos.d/ 6. ▲ 注意:等ela2、ela3安装完elastic再进行拷贝 拷贝.yaml配置文件:scp -r /etc/elasticsearch/elasticsearch.yml ela2:/etc/elasticsearch/ scp -r /etc/elasticsearch/elasticsearch.yml ela3:/etc/elasticsearch/
ela2
#======================= ela2 ========================= 1. 对表ela1:yum -y install ntpdate #安装ntp客户端 ntpdate 192.168.178.24 #填写ntpd服务器IP 2.下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 3.安装elastic:yum -y install elasticsearch 4.运行elastic自启动项:systemctl daemon-reload systemctl enable elasticsearch.service 5.修改.yaml配置文件:vim /etc/elasticsearch/elasticsearch.yml 找到进行修改 node.name: ela2 #修改节点名即可,其他不动
ela3
#======================= ela3 ========================= 1. 对表ela1:yum -y install ntpdate #安装ntp客户端 ntpdate 192.168.178.24 #填写ntpd服务器IP 2.下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 3.安装elastic:yum -y install elasticsearch 4.运行elastic自启动项:systemctl daemon-reload systemctl enable elasticsearch.service 5.修改.yaml配置文件:vim /etc/elasticsearch/elasticsearch.yml 找到进行修改 node.name: ela3 #修改节点名即可,其他不动
ela1/ela2/ela3
#---------- 依次启动elastic ----------- ela1: systemctl start elasticsearch ela2: systemctl start elasticsearch ela3: systemctl start elasticsearch 在每个Node上查看集群健康状态:curl -X GET "localhost:9200/_cat/health?v" 查看集群节点信息:curl -X GET "localhost:9200/_cat/nodes?v"
⛔️注意:按照先后顺序依次启动,不要抢着去启动,等上一个启动完,在启动下一个
🗡问题解决:
示例: 使用命令查看监控状态:curl -X GET "localhost:9200/_cat/nodes?v" #------------------- ela1、ela3 --------------------------- epoch timestamp cluster status node.total node.data shards pri relo init unassign elk green 2 2 2 1 #------------------- ela2 --------------------------------- epoch timestamp cluster status node.total node.data shards pri relo init unassign elk green 1 1 1 1 #----------------------------------------------------------- 结果:ela1与ela3在集群中,ela2不在,只有2个 原因:每个节点之间都会去测对方的状态,会开启秒表,在一定时间内没感应到对方的存在,就会踢出集群,启动时间长..... ------------------------------------------------------------- 解决,在踢出集群的Node上:rm -rf /var/lib/elasticsearch/nodes/ systemctl restart elasticsearch 再次查看:[root@ela1 ~]# curl -X GET "localhost:9200/_cat/nodes?v" ip heap.percent ram.percent e master name 192.168.178.24 26 ..... cdfhilmrstw - ela1 192.168.178.26 10 ..... cdfhilmrstw * ela3 192.168.178.25 27 ..... cdfhilmrstw - ela2
三、部署filebeat与logstash
原理:filebeat对日志进行收集后过滤,交到logstash上,再对日志进行自定义索引字段二次过滤
🌍环境:filebeat:192.168.178.27 logstash:192.168.178.28
💯 百度网盘:
链接:https://pan.baidu.com/s/1Upkd2qFLmfbuaYZ4Gwr5NQ
提取码:help
注意:关闭 firewalld、selinux
FileBeat
对表ela1:yum -y install ntpdate #安装ntp客户端 ntpdate 192.168.178.24 #填写ntpd服务器IP 修改主机名:hostname set-hostname filebeat1 1. rz上传压缩包解压缩到指定目录: tar xzvf filebeat‐7.13.2‐linux‐x86_64.tar.gz ‐C /usr/local/ 2.重命名: mv /usr/local/filebeat‐7.13.2‐linux‐x86_64 /usr/local/filebeat 3.配置systemd方式的filebeat启动管理文件:vim /usr/lib/systemd/system/filebeat.service [Unit] Description=Filebeat sends log files to Logstash or directly to Elasticsearch Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml Restart=always [Install] WantedBy=multi-user.target 4. 启动服务:systemctl start filebeat systemctl status filebeat 5. 修改.yaml配置文件:vim /usr/local/filebeat/filebeat.yml 找到注释 #output.elasticsearch: # hosts: ["localhost:9200"] 找到解开注释 output.logstash: hosts: ["192.168.178.28:5044"] #填写logstash的IP地址及端口 6. 开启filebeat自带的nginx模块进行收集数据: /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml modules enable nginx 7. 安装nginx:yum -y install epel-release && yum -y install nginx #前面执行成功就执行后面 8. 开启nginx,往nginx的access/error日志中添加数据:vim /var/log/nginx/{access.log,error.log} 9. 删除防止重读的锁.lock:rm -rf /usr/local/filebeat/data/ 10. 执行filebeat:/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml -e
Logstash
对表ela1:yum -y install ntpdate #安装ntp客户端 ntpdate 192.168.178.24 #填写ntpd服务器IP 修改主机名:hostname set-hostname logstash1 1. rz上传压缩包解压缩到指定目录: tar ‐xf logstash‐7.13.2‐linux‐x86_64.tar.gz ‐C /usr/local/ 2. 重命名: mv /usr/local/logstash‐7.13.2/ /usr/local/logstash 3. 编写配置:vim /usr/local/logstash/config/first-pipeline.conf input { beats { port => 5044 } } filter { #过滤 grok { match => { "message" => "%{COMBINEDAPACHELOG}" } #定义格式输出的信息,类似与nginx日志格式 remove_field => ["message"] #在信息中移除该字段 } geoip { source => "clientip" #定位信息中IP的地理位置 } } output { stdout { codec => rubydebug } #先打印在屏幕上 codec是一种输出格式 #if [log][file][path] == "/var/log/nginx/access.log" { #elastic自带的变量 if [event][dataset] == "nginx.access" { #filebeat自带变量 elasticsearch { hosts => ["192.168.178.24:9200","192.168.178.25:9200","192.168.178.26:9200"] index => "%{[host][hostname]}-nginx-access-%{+YYYY.MM.dd}" } } #else if [log][file][path] == "/var/log/nginx/error.log" { else if [event][dataset] == "nginx.error" { elasticsearch { #填写elastic集群的IP:port hosts => ["192.168.178.24:9200","192.168.178.25:9200","192.168.178.26:9200"] index => "%{[host][hostname]}-nginx-error-%{+YYYY.MM.dd}" #索引名 主机名-nginx-error-时间点(年.月.日) } } } 4. 启动程序: /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/first-pipeline.conf
ela1/ela2/ela3
1. 查看集群中的索引:curl -X GET "192.168.178.24:9200/_cat/indices" curl -X GET "192.168.178.25:9200/_cat/indices" curl -X GET "192.168.178.26:9200/_cat/indices" green open filebeat1-nginx-error-2021.08.21 CuvjMu05TLaZCb-3LG03xg 1 1 26 0 133.8kb 66.9kb green open filebeat1-nginx-access-2021.08.21YiyagsrmSMSW4YoK-LLYHw 1 1 69 0 187.9kb 93.9kb
四、部署Kibana
原理:将elasticsearch上存储的数据以JSON格式再kibana上进行Web前端页面的展示
🌍环境:kibana1:192.168.178.29
对表ela1:yum -y install ntpdate #安装ntp客户端 ntpdate 192.168.178.24 #填写ntpd服务器IP 修改主机名:hostname set-hostname kibana1 1. 解压缩到指定目录:tar -xvzf kibana-7.13.2-linux-x86_64 -C /usr/local/ mv /usr/local/kibana-7.13.2-linux-x86_64/ /usr/local/kibana 2.修改.yaml配置文件:vim /usr/local/kibana/config/kibana.yml # server.port: 5601 # 对外提供的监听端口 # server.host: "0.0.0.0" # 服务的IP,这里代表所有 # elasticsearch.hosts: ["http://192.168.178.24:9200"] # ela1的IP # logging.dest: /var/log/kibana/kibana.log #日志最终的存放位置,待会进行创建 # i18n.locale: "zh-CN" #使用中文Web前端页面 3. 创建用户:useradd ela 4. 创建目录并授权:mkdir /run/kibana /var/log/kibana chown -R ela.ela /run/kibana /var/log/kibana/ /usr/local/kibana 5. 运行kibana:su - ela #切换用户,kibana默认不使用root登录 在后台运行:nohup /usr/local/kibana/bin/kibana & 查看端口: ss -anpt | grep 5601 6. 强制使用root运行kibana:nohup /usr/local/kibana/bin/kibana --allow-root & #二者选一即可 7. 浏览器访问:http://192.168.178.29:5601 #===============增加索引模式================= 1. 左上角 "三" > Management > Stack Management 2. 左方找到 "索引模式" > 创建索引模式 > 文本框填写"filebeat1-nginx-access-2021.08.21" > 下一步 > 时间字段选择 @timestamp > 创建索引模式 #==============查看及分析索引字段=============== 1. 左上角 "三" > Discover > 在左方根据自己的需求选择查看的字段 #==============创建仪表板分析================ 1. 左上角 "三" > Overview > 仪表板 > 创建新的仪表板 > 根据需求拖动字段查看排名.......