ElasticSearch日志检索实践项目(详细步骤+注意点)
一、前期准备R
1、准备三台虚拟机组合一个集群;
node-1:
elasticsearch-8.18.8-linux-x86_64.tar.gz
kibana-8.18.8- linux-x86_64.tar.gz
node-2:
logstash-8.18.8-linux-x86_64.tar.gz
node-3:
filebeat-8.18.8-linux-x86_64.tar.gz
压缩包存放在相应目录下并赋予该目录用户权限以及执行权限;
useradd elk
#后面每个文件修改用户权限
chown -R elk: [文件名]
**注意**:需要都是同一版本的,不然后面会因版本问题报错而无法采集日志。
3、提前规划好虚拟机的IP地址(同一网段内);
node-1:192.168.10.11
node-2:192.168.10.12
node-3:192.168.10.13
4、在三台主机上配置域名解析(etc/hosts)以及永久关闭selinux和防火墙,
原因:避免影响服务组件端口之间的通信 ,不然会出现网页打不开,端口不开放的结果。
5、系统依赖安装:
dnf install java-25-openjdk
#添加全局环境变量配置
echo "export JAVA_HOME=/usr/lib/jvm/java-25-openjdk" >> /etc/profile
#加载配置文件
source /etc/profile
原因:ELK套件(尤其是Elasticsearch和Logstash)是用Java编写的,而Kibana则基于Node.js环境运行。它们无法在裸操作系统上直接运行。
6、内核参数调优:
#最大文件句柄
cat >> /etc/security/limits.conf <<EOF
elk soft nofile 65535
elk hard nofile 65535
elk soft nproc 40960
elk hard nproc 40960
EOF
#系统虚拟内存
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
二、执行过程
node-1:
修改主配置文件内容(elasticsearch.yml):
cluster.name: elk-cluster
# 节点名称
node.name: node-1
# 数据存储路径
path.data: /opt/logs/elasticsearch
# 日志路径
path.logs: /opt/logs/elasticsearch
# 监听所有网卡
network.host: 0.0.0.0
# ES服务端口
http.port: 9200
# 单节点集群模式(3节点仅一台ES,不需要集群)
discovery.type: single-node
# 如果是集群
#discovery.seed_hosts: ["节点1_IP", "节点2_IP"]
#cluster.initial_master_nodes: ["节点1名称", "节点2名称"]
# 关闭自动安全初始化(手动配置账号密码,简化测试环境)
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
修改jvm.options:
#JVM内存配置:虚拟机 2G 内存设置 1G,4G 内存设置 2G,最大不超过 31G
vim /opt/elk/elasticsearch/config/jvm.options
-Xms1g
-Xmx1g
配置系统服务:
cat > /usr/lib/systemd/system/elasticsearch.service <<EOF
[Unit]
Description=Elasticsearch Service
After=network.target
[Service]
User=elk
Group=elk
ExecStart=/opt/elk/elasticsearch/bin/elasticsearch
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启动ES并验证
systemctl daemon-reload
systemctl enable elasticsearch --now
#访问验证:
curl http://192.168.10.11:9200
修改kibana.yml文件:
# 服务端口
server.port: 5601
# 允许所有IP访问面板
server.host: "0.0.0.0"
# ES地址
elasticsearch.hosts: ["http://192.168.10.11:9200"]
# 设置中文
i18n.locale: "zh-CN"
# 关闭安全验证(和ES对应)
xpack.security.enabled: false
配置服务文件以及加载(同上)
注意:一点要验证端口是否开放。
node-2:
修改管道文件配置(.conf):
# input:接收Filebeat推送的日志,5044端口
input {
beats { port => 5044 }
}
# filter:日志清洗、分割、格式化(示例处理系统日志/nginx日志)
filter {
# 系统日志分割,使用 grok 解析日志格式,使用 date 校准时间戳等
if [type] == "syslog" {
grok {
# match => { "message" => "%{COMBINEDAPACHELOG}" }
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %
{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %
{GREEDYDATA:syslog_message}" }
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
# 去除无用字段
mutate {
remove_field => ["[agent][version]","ecs"]
}
}
# output:清洗后数据写入Elasticsearch
output {
elasticsearch {
hosts => ["http://192.168.10.12:9200"]
index => "logs-%{+YYYY.MM.dd}" # 按天分索引
}
# 控制台输出调试(生产可注释)
stdout { codec => rubydebug }
}
修改 Logstash JVM 内存
编辑 /opt/elk/logstash/config/jvm.options:
-Xms512m
-Xmx512m
配置服务文件以及加载(同上)
注意:一点要验证端口是否开放。
node-3:
修改主配置文件logstash.yml:
# 采集日志文件输入
filebeat.inputs:
- type: filestream
enabled: true
paths:
# 采集系统日志路径
- /var/log/messages
- /var/log/secure
- /var/log/nginx/access.log
# 日志分类标签
fields:
type: syslog
fields_under_root: true
# 多行日志合并(如java异常堆栈)
multiline.type: pattern
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
# 输出到Logstash,不直接输出ES
output.logstash:
hosts: ["192.168.10.13:5044"]
# 关闭ES默认输出
output.elasticsearch.enabled: false
# 关闭Kibana内置模块(不需要自动配置)
setup.kibana.enabled: false
setup.ilm.enabled: false
校验配置文件语法:
./filebeat test config -c /opt/monitor/filebeat/filebeat.yml
#具体要看当前在哪个目录
配置服务文件以及加载(同上)
注意:一点要验证端口是否开放。
最后,验证所有服务的运行状态:
# ES 节点
systemctl status elasticsearch kibana
# Logstash 节点
systemctl status logstash
# Filebeat 节点
systemctl status filebeat
1、模拟生成测试日志(node-3节点)
echo "test log message $(date)" >> /var/log/messages
2、Logstash 查看实时接收日志(node-2节点):
tail -f /opt/monitor/logstash/logs/logstash-plain.log
3、ES查看索引是否生成:
curl http://127.0.0.1:9200/_cat/indices?v
#能看到 logs-YYYY.MM.dd 索引代表日志成功入库。
至此,一整套环境流程搭建完毕;接下来就是对数据进行实际性的操作了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)