Linux架构篇、第四章_ELK与EFK-7.17.9的日志管理

Linux_基础篇

欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!

题目:ELK与EFK-7.17.9的日志管理

版本号: 1.0,0
作者: @老王要学习
日期: 2025.04.25
适用环境: Centos7

文档说明

本文档围绕 CentOS 7 环境下部署 ELK(Elasticsearch+Kibana+Logstash)与 EFK(Elasticsearch+Kibana+Filebeat)日志管理系统展开,详细记录了版本为 7.17.9 的组件安装、配置及优化过程。内容涵盖环境准备、各组件部署步骤、数据收集配置、可视化操作及性能优化方法,并提供了具体命令和配置示例,适用于系统管理员参考使用

环境准备

硬件要求

  • 服务器: 2核CPU、2GB内存,20GB硬盘空间
  • 网络: 确保服务器具有固定的IP地址,并且防火墙允许FTP端口(默认22端口)的通信

软件要求

  • 操作系统:Centos7
  • FTP软件:SecureCRT
  • 软件包:elasticsearch-7.17.9、kibana-7.17.9、logstash-7.17.9、filebeat-7.17.9

一、部署elasticstack在174.20

1.1下载ELK包

#web01安装如下
https://mirrors.aliyun.com/elasticstack/7.x/yum/7.17.9/filebeat-7.17.9-x86_64.rpm
https://mirrors.aliyun.com/elasticstack/7.x/yum/7.17.9/logstash-7.17.9-x86_64.rpm

#ELK02安装如下
https://mirrors.aliyun.com/elasticstack/7.x/yum/7.17.9/elasticsearch-7.17.9-x86_64.rpm
https://mirrors.aliyun.com/elasticstack/7.x/yum/7.17.9/kibana-7.17.9-x86_64.rpm

ELK02安装elasticsearch

rpm -ivh elasticsearch-7.17.9-x86_64.rpm 

查看elasticsearch .yml位置

rpm -qc elasticsearch 

1.2编辑elasticsearch .yml文件修改

1.2.1方法一vim进入修改如下:

vim/etc/elasticsearch/elasticsearch.yml
#集群名称自定义
cluster.name: my-elk

#本机主机名
node.name: elk02

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

bootstrap.memory_lock: false

#主机IP
network.host: 192.168.174.20 
http.port: 9200

#本机主机名
discovery.seed_hosts: ["elk02"]
cluster.initial_master_nodes: ["elk02"]

1.2.2方法二sed替换如下:

#修改如下:
sed -i 's/#cluster.name: my-application/cluster.name: my-elk/' /etc/elasticsearch/elasticsearch.yml

#修改本机主机名
sed -i 's/#node.name: node-1/node.name: elk02/' /etc/elasticsearch/elasticsearch.yml

#修改#bootstrap.memory_lock为false
sed -i 's/#bootstrap.memory_lock: true/bootstrap.memory_lock: false/' /etc/elasticsearch/elasticsearch.yml

#修改#network.host为本机ip174.20
sed -i 's/#network.host: 192.168.0.1/network.host: 192.168.174.20/' /etc/elasticsearch/elasticsearch.yml

#打开#http.port: 9200
sed -i 's/#http.port: 9200/http.port: 9200/' /etc/elasticsearch/elasticsearch.yml

#修改为本机主机名
sed -i 's/#discovery.seed_hosts: \["host1", "host2"\]/discovery.seed_hosts: \["elk02"\]/' /etc/elasticsearch/elasticsearch.yml

sed -i 's/#cluster.initial_master_nodes: \["node-1", "node-2"\]/cluster.initial_master_nodes: \["elk02"\]/' /etc/elasticsearch/elasticsearch.yml

1.3重载并重启elasticsearch.service

systemctl daemon-reload 
systemctl restart elasticsearch.service 
systemctl enable elasticsearch.service

二、部署kibana在主机 174.20

2.1rpm安装kibana

rpm -ivh kibana-7.17.9-x86_64.rpm

2.2修改kibana.yml文件

2.2.1方法一vim进入修改如下:

vim /etc/kibana/kibana.yml
#启用
server.port: 5601

#修改为本机主机名
server.host: "elk02"
server.name: "elk02" 

#修改es地址为本机ip的9200端口
elasticsearch.hosts: ["http://192.168.174.20:9200"]
kibana.index: ".kibana"

#设置中文
i18n.locale: "zh-CN"

2.2.2方法二sed替换如下:

sed -i 's/#server.port: 5601/server.port: 5601/' /etc/kibana/kibana.yml

sed -i 's/#server.host: "localhost"/server.host: "elk02"/' /etc/kibana/kibana.yml

sed -i 's/#server.name: "your-hostname"/server.name: "elk02"/' /etc/kibana/kibana.yml

sed -i 's|#\s*elasticsearch\.hosts:\s*\["http://localhost:9200"\]|elasticsearch.hosts: ["http://192.168.174.20:9200"]|' /etc/kibana/kibana.yml

sed -i 's/#kibana.index: ".kibana"/kibana.index: ".kibana"/' /etc/kibana/kibana.yml

sed -i 's|#i18n.locale: "en"|i18n.locale: "zh-CN"|' /etc/kibana/kibana.yml

2.3重载并重启

systemctl daemon-reload 
systemctl restart kibana.service 
systemctl enable kibana.service 

三、部署logstash在主机174.10

3.1rpm安装logstash

rpm -ivh logstash-7.17.9-x86_64.rpm 

3.2自定义Logstash配置文件

cat>/etc/logstash/conf.d/mymessage.conf<<EOF
input{
file{
path=>["/var/log/messages"]
start_position=>"beginning"
}
}
output{
elasticsearch{
hosts=>"http://192.168.174.20:9200"
index=>"messages-%{+yyyy.MM.dd}"
}
}
EOF

3.3启动 Logstash 并使用指定配置文件

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mymessage.conf

3.4访问elastic进行配置

http://192.168.174.20:5601
3.4.1左上角三条斜杠——Stack Management——数据——索引管理——看到messages-2025.04.25添加成功

![[Pasted image 20250425164356.png]]

3.4.2kibana——索引模式——创建索引模式

![[Pasted image 20250425164804.png]]

3.4.3名字(匹配索引)——messages*——时间戳字段——@timestamp——创建索引模式

![[Pasted image 20250425164928.png]]

3.4.4Analytics——Discover——查看柱状图

![[Pasted image 20250425165323.png]]

3.4.5Analytics——Dashboard——创建仪表板——创建可视化

![[Pasted image 20250425165523.png]]

3.4.6——messages*——message.keyword——保存并返回

![[Pasted image 20250425170132.png]]

3.4.7测试查看计数变化
#创建2个用户
useradd user1
useradd user2

#登录用户并退出,查看计数变化
su - user1
exit

su - user2
exit

![[Pasted image 20250425171259.png]]

3.5安装NGINX检测变化

3.5.1安装NGINX写入2个网页
dnf -y install nginx
systemctl start nginx
echo "test1" >> /usr/share/nginx/html/test1.html
echo "test2" >> /usr/share/nginx/html/test2.html
3.5.2在174.20使用curl访问192.168.174.10查看日志变化
curl 192.168.174.10

cat access.log 

输出结果如下:
192.168.174.20 - - [25/Apr/2025:15:29:19 +0800] "GET / HTTP/1.1" 200 7620 "-" "curl/7.76.1" "-"
3.5.3创建NGINX数据收集配置文件
cat>/etc/logstash/conf.d/ngx_access.conf<<EOF
input{
file{   
path=>["/var/log/nginx/access.log"]
start_position=>"beginning"
}
}
output{
elasticsearch{
hosts=>"http://192.168.174.20:9200"
index=>"myngx_access--%{+yyyy.MM.dd}"
}
}
EOF

#启动 Logstash 并使用指定配置文件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf
3.5.4在174.20安装httpd进行压力测试
dnf -y install httpd-tools

ab -c 10 -n 100 http://192.168.174.10/
3.5.5同上步骤进行创建可视化查看测试变化

![[Pasted image 20250425172502.png]]
![[Pasted image 20250425172525.png]]

3.6对NGINX数据收集进行优化

3.6.1修改NGINX配置文件并重启
vim /etc/nginx/nginx.conf
#添加如下:
    log_format  access_json  '{'
    '"remote_addr":"$remote_addr",'
	'"remote_user":"$remote_user",'
	'"time_local":"$time_local",'
	'"request":"$request",'
	'"status":"$status",'
	'"body_bytes_sent":"$body_bytes_sent",'
	'"http_referer":"$http_referer",'
	'"http_user_agent":"$http_user_agent"'
	'"http_x_forwarded_for":"$http_x_forwarded_for",'
	'}';
	access_log  /var/log/nginx/access.log  access_json;

#重启nginx 
systemctl restart nginx
3.6.2优化logstash收集NGINX数据,加json插件
cat>/etc/logstash/conf.d/nginx_access.conf<<EOF
input{
file{   
path=>["/var/log/nginx/access.log"]
start_position=>"beginning"
}
}
filter{
json{
source=>"message"
}
}
output{
elasticsearch{
hosts=>"http://192.168.174.20:9200"
index=>"mynginx_access--%{+yyyy.MM.dd}"
}
}
EOF

3.6.3清空日志并启动 Logstash
#清空日志文件
>/var/log/nginx/access.log 

#启动 Logstash 并使用指定配置文件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf

3.7使用grok格式

3.7.1修改nginx.conf文件
vim /etc/nginx/nginx.conf
#修改如下:
    access_log  /var/log/nginx/access.log  main;

#重启nginx 
systemctl restart nginx
3.7.2优化logstash收集NGINX数据,加grok插件
cat>/etc/logstash/conf.d/nginx_access.conf<<EOF
input{
file{
path=>["/var/log/nginx/access.log"]
start_position=>"beginning"
}
}
filter{
grok{
match=>{
"message"=>['%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:timestamp}\] "%{WORD:http_method} %{URIPATH:url_path}(?:%{URIPARAM:url_query})? HTTP/%{NUMBER:http_version}" %{NUMBER:status:int} %{NUMBER:bytes_sent:int} "%{DATA:referrer}" "%{DATA:user_agent}" "%{DATA:x_forwarded_for}"']
}
}
}
output{
elasticsearch{
hosts=>"http://192.168.174.20:9200"
index=>"nginx_grok_access_%{+YYYY.MM.dd}"
}
}
EOF

3.7.3清空日志并启动 Logstash
#清空日志文件
>/var/log/nginx/access.log 

#启动 Logstash 并使用指定配置文件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf

![[Pasted image 20250427105518.png]]

四、安装filebeat

rpm -ivh filebeat-7.17.9-x86_64.rpm 

4.1修改filebeat配置文件

4.1.1vim修改:

vim /etc/filebeat/filebeat.yml 
#修改如下:
id: my-nginx-id

  enabled: true
  
  output.logstash:
  
#hosts: ["localhost:5044"]/  #hosts: ["192.168.174.20:5044"]

#output.elasticsearch:

#  hosts: ["localhost:9200"]

4.1.2sed修改:

sed -i 's/  id: my-filestream-id/  id: my-nginx-id/' /etc/filebeat/filebeat.yml

sed -i 's/  enabled: false/  enabled: true/' /etc/filebeat/filebeat.yml

sed -i 's/\/var\/log\/\*\.log/\/var\/log\/nginx\/access\.log/' /etc/filebeat/filebeat.yml

sed -i 's/#output.logstash:/output.logstash:/' /etc/filebeat/filebeat.yml

sed -i 's/  #hosts: \["localhost:5044"\]/  hosts: \["192.168.174.20:5044"\]/' /etc/filebeat/filebeat.yml

sed -i 's/output.elasticsearch:/#output.elasticsearch:/' /etc/filebeat/filebeat.yml

sed -i 's/  hosts: \["localhost:9200"\]/#  hosts: \["localhost:9200"\]/' /etc/filebeat/filebeat.yml

#重启filebeat服务
systemctl restart filebeat.service 
systemctl enable filebeat.service 

4.2为174.20传输logstash相关配置

scp /root/logstash-7.17.9-x86_64.rpm 192.168.174.20:/root/

#进入174.20rpm安装logstash
rpm -ivh logstash-7.17.9-x86_64.rpm

#启动logstash服务
systemctl start logrotate.service 

#拷贝10文件到20 
scp /etc/logstash/conf.d/nginx_access.conf 192.168.174.20:/etc/logstash/conf.d/nginx_access.conf

#修改索引名字
sed -i 's/index=>"nginx_grok_access_%{+YYYY\.MM\.dd}"/index=>"nginx_filebeat_grok_access_%{+YYYY\.MM\.dd}"/' /etc/logstash/conf.d/nginx_access.conf

4.3启动 Logstash 并使用指定配置文件

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf
<think>好的,我现在需要帮助用户找到如何使用docker-compose安装EFK集群的配置示例或教程。首先,我得回忆一下EFK这三个组件的作用:Elasticsearch负责存储和搜索日志,Fluentd是日志收集器,Kibana用于可视化。用户提到的引用里有几个相关的参考资料,比如引用3和4提到了docker-compose部署ELKEFK,可能需要从中提取有用的信息。 用户提供的引用3是关于部署ELK的,其中提到了修改volumes路径来挂载宿主机目录到Elasticsearch容器。而引用4则涉及搭建ES集群和EFK系统的参数配置,特别是发现设置。不过EFK中的F是Fluentd,而ELK中的L是Logstash,两者在日志收集层不同,但配置思路类似,需要相应调整。 接下来,我需要整合这些信息,构建一个docker-compose.yml的示例。首先确定各个服务的镜像版本,比如Elasticsearch可能用7.x版本,Kibana对应版本,Fluentd则需要支持Docker日志驱动的镜像。然后配置各个服务的端口、环境变量和卷挂载。 对于Elasticsearch,需要设置discovery.type为single-node,或者如果是集群,按照引用4中的参数配置发现主机和主节点。但用户可能只需要一个简单的示例,所以暂时用单节点模式。挂载data目录防止数据丢失,如引用3中的做法。 Fluentd的配置需要创建一个自定义的配置文件,用于接收Docker容器的日志并输出到Elasticsearch。可能需要构建一个包含必要插件的Fluentd镜像,比如fluent-plugin-elasticsearch。用户需要创建fluentd.conf,配置source和match部分,指向Elasticsearch服务。 Kibana的配置相对简单,连接到Elasticsearch,设置依赖关系确保启动顺序正确。另外,网络配置也很重要,所有服务需要在一个自定义网络中以便通信。 还需要考虑环境变量,比如Elasticsearch的内存设置,避免容器因内存不足崩溃。此外,权限问题,特别是Elasticsearch需要某些系统配置,如vm.max_map_count,这可能需要用户在宿主机上设置。 最后,生成相关问题时要围绕EFK的配置、优化、故障排除和应用场景展开,确保用户能进一步探索相关问题。需要检查引用中的内容是否适用,比如引用3中的挂载路径和引用4的集群配置参数,确保示例的准确性和实用性。</think>以下是如何使用docker-compose部署EFK(Elasticsearch, Fluentd, Kibana)集群的配置示例和操作步骤: ### 一、docker-compose.yml 配置示例 ```yaml version: &#39;3.7&#39; services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 container_name: elasticsearch environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" - "discovery.type=single-node" # 单节点模式简化配置[^4] volumes: - /etc/localtime:/etc/localtime - ./es_data:/usr/share/elasticsearch/data # 数据持久化路径[^3] ports: - "9200:9200" - "9300:9300" networks: - efk_net kibana: image: docker.elastic.co/kibana/kibana:7.17.3 container_name: kibana depends_on: - elasticsearch ports: - "5601:5601" environment: ELASTICSEARCH_HOSTS: http://elasticsearch:9200 networks: - efk_net fluentd: image: fluent/fluentd:v1.15-1 container_name: fluentd volumes: - ./fluentd.conf:/fluentd/etc/fluent.conf - /var/log:/var/log # 挂载宿主机日志目录 ports: - "24224:24224" networks: - efk_net networks: efk_net: driver: bridge ``` ### 二、Fluentd配置文件(fluentd.conf) ```xml <source> @type forward port 24224 </source> <match **> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix fluentd include_tag_key true </match> ``` ### 三、部署步骤 1. 创建目录结构: ```bash mkdir efk && cd efk mkdir es_data ``` 2. 设置系统参数(防止Elasticsearch启动失败): ```bash sudo sysctl -w vm.max_map_count=262144 ``` 3. 编写docker-compose.yml和fluentd.conf文件 4. 启动服务: ```bash docker-compose up -d # 核心启动命令[^1] ``` 5. 验证服务: - Elasticsearch: `curl http://localhost:9200` - Kibana: 浏览器访问 `http://IP:5601` ### 四、关键配置说明 1. Elasticsearch数据持久化通过volume挂载实现,避免容器重启数据丢失[^3] 2. Fluentd通过forward插件接收Docker容器日志,需配合Docker日志驱动使用 3. 集群模式下需配置`discovery.seed_hosts`和`cluster.initial_master_nodes`参数[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值