一、什么是ELK
ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案。
ELK 的好处:
ELK 组件在大数据运维系统中,主要可解决的问题如下:
- 日志查询,问题排查,故障恢复,故障自愈
- 应用日志分析,错误报警
- 性能分析,用户行为分析
二、Elasticsearch
是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索
Elasticsearch 的特点:
- 实时搜索、实时分析
- 分布式架构、实时文件存储
- 文档导向,所有对象都是文档
- 高可用,易扩展,支持集群,分片与复制
- 接口友好,支持 json
三、Logstash
Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。
四、kibana
Kibana 为 elasticsearch 提 供 一 个 查 看 数 据 的 web 界 面 , 其 主 要 是 通 过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。
安装部署ELK
bash
node1节点(2C/4G):node1/192.168.91.100 Elasticsearch
node2节点(2C/4G):node2/192.168.91.101 Elasticsearch
Apache节点: apache/192.168.91.103 Logstash Kibana Apache
前期准备:java环境,关闭防火墙
bash
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
systemctl disable --now firewalld
setenforce 0
sed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
1.安装 Elasticsearch 软件
bash
ls
elasticsearch-6.7.2.rpm elasticsearch-head-master.zip node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2
rpm -ivh elasticsearch-6.7.2.rpm
#cd /etc/elasticsearch/
mkdir bak
cp -a *.yml bak/
#备份
修改配置文件
bash
vim elasticsearch.yml
17 cluster.name: my-elk-cluster
#修改集群名字
23 node.name: node1
24 node.master: true
25 node.data: true
#设置 节点名称 主从之间不能一致 24作为主节点 25作为数据节点
45 bootstrap.memory_lock: true
#内存锁开启 禁止使用 swap
59 network.host: 0.0.0.0
#监听地址
60 http.port: 9200
# 默认使用端口
61 transport.tcp.port: 9300
#内部传输端口
73 discovery.zen.ping.unicast.hosts: ["192.168.91.100:9300", "192.168.91.101:9300"]
#自动集群发现,加入主机名 使用单播 类似心跳线
grep -v "^#" elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node1
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.91.100:9300", "192.168.91.101:9300"]
修改系统配置
bash
vim /etc/security/limits.conf
soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* soft memlock unlimited
* hard memlock unlimited
vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144
sysctl -p
sysctl -a | grep vm.max_map_count
修改systemd 服务管理器
bash
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
重启服务器 启动 elasticsearch
bash
reboot
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200
查看节点信息
bash
浏览器访问
http://192.168.91.100:9200
http://192.168.91.101:9200
查看节点 Node1、Node2 的信息。
浏览器访问
http://192.168.91.100:9200/_cluster/health?pretty
http://192.168.91.101:9200/_cluster/health?pretty
查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
浏览器访问 http://192.168.91.100:9200/_cluster/state?pretty 检查群集状态信息
安装谷歌插件
2.在应用服务器部署 Logstash
bash
cd /opt
[root@localhost opt]# rpm -ivh logstash-6.7.2.rpm
#开启服务
systemctl enable --now logstash.service
[root@localhost opt]# ln -s /usr/share/logstash/bin/logstash /usr/bin/
# 做软连接
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
使用 Logstash 将信息写入 Elasticsearch 中
bash
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.91.100:9200","192.168.91.101:9200"]} }'
#结果不在标准输出显示,而是发送至 Elasticsearch 中
#可浏览器访问http://192.168.91.100:9100/ 查看索引信息和数据浏览。
............................
[INFO ] 2024-07-16 00:50:12.096 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
# 输入信息
www.kgc.com
hello world
使用Logstash配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)
-
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
file beats kafka redis stdin
-
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容
date 对数据中的时间格式进行统一和格式化
mutate 对一些无用的字段进行剔除,或增加字段
mutiline 对多行数据进行统一编排,多行合并或拆分
-
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
elasticsearch stdout
bash
vim /etc/logstash/conf.d/system-log.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => [ "192.168.91.100:9200","192.168.91.101:9200" ]
index => "system-%{+YYYY.MM.dd}"
}
}
chmod +r /var/log/messages
#添加权限
logstash -f system-log.conf
#启动logstash
........................................................................
[INFO ] 2024-07-16 01:02:41.716 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}
3.安装 kibana
bash
rpm -ivh kibana-6.7.2-x86_64.rpm
cd /etc/kibana/
cp kibana.yml kibana.yml.bak -a
vim kibana.yml
2 server.port: 5601 #打开端口
7 server.host: "0.0.0.0" #监听端口
28 elasticsearch.hosts: ["http://192.168.91.100:9200", "http://192.168.91.101:9200"] #el服务器地址
37 kibana.index: ".kibana" #打开索引
96 logging.dest: /var/log/k.log #指定日志文件, 需要手动建立文件
114 i18n.locale: "zh-CN" #中文设置
chown kibana:kibana /var/log/k.log
systemctl enable --now kibana.service
ss -nap |grep 5601
tcp LISTEN 0 128 *:5601 *:* users:(("node",pid=42235,fd=19))
192.168.91.102:5601
#浏览器访问测试