论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
Docker搭建ELKF日志分析体系
Docker搭建ELKF日志分析体系
万有斥力
金牌会员
|
2024-6-13 21:22:45
|
显示全部楼层
|
阅读模式
楼主
主题
676
|
帖子
676
|
积分
2028
Docker搭建ELKF日志分析体系
资源列表
操纵体系配置主机名IP所需软件CentOS 7.94C8Gdocker192.168.93.165Docker-ce 26.1.2
底子环境
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
复制代码
关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
复制代码
修改主机名
hostnamectl set-hostname docker
复制代码
一、体系环境准备
基于Docker环境摆设ELKF日志分析体系,实现日志分析功能
1.1、创建所需的映射目录
# 根据实际情况做修改
[root@docker ~]# mkdir -p /var/log/elasticsearch
[root@docker ~]# chmod -R 777 /var/log/elasticsearch/
复制代码
1.2、修改体系参数
# 定义了一个进程可以拥有的最大内存映射区域数
[root@docker ~]# echo "vm.max_map_count=655360" >> /etc/sysctl.conf
[root@docker ~]# sysctl -p
vm.max_map_count = 655360
# 配置用户和系统级的资源限制。修改的内容立即生效(严谨)
[root@docker ~]# cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 63335
* soft memlock unlimited
* hard memlock unlimited
EOF
复制代码
1.3、单击创建elk-kgc网络桥接
[root@docker ~]# docker network create elk-kgc
b8b1b7e36412169d689c39b39b5624c79f8fe0698a3c7b95dc1c78852285644e
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e8a2cadd9616 bridge bridge local
b8b1b7e36412 elk-kgc bridge local
3566b89c775b host host local
a5914394299b none null local
复制代码
二、基于Dockerfile构建Elasticsearch镜像
执行步调如下:
2.1、创建Elasticsearch工作目录
[root@docker ~]# mkdir -p /root/elk/elasticsearch
[root@docker ~]# cd /root/elk/elasticsearch/
复制代码
2.2、上传资源到指定工作路径
上传Elasticsearch的源码包和Elasticsearch配置文件到/root/elk/elasticsearch目录下,所需文件如下
[root@docker elasticsearch]# ll
total 27872
-rw-r--r-- 1 root root 28535876 Jun 6 22:45 elasticsearch-6.1.0.tar.gz
-rw-r--r-- 1 root root 3017 Jun 6 22:44 elasticsearch.yml
# 配置文件内容yml如下
[root@docker elasticsearch]# cat elasticsearch.yml | grep -v "#"
cluster.name: kgc-elk
node.name: node-1
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
复制代码
2.3、编写Dockerfile文件
[root@docker elasticsearch]# cat Dockerfile
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD elasticsearch-6.1.0.tar.gz /usr/local/
RUN cd /usr/local/elasticsearch-6.1.0/config
RUN mkdir -p /data/behavior/log-node1
RUN mkdir /var/log/elasticsearch
COPY elasticsearch.yml /usr/local/elasticsearch-6.1.0/config/
RUN useradd es && chown -R es:es /usr/local/elasticsearch-6.1.0/
RUN chmod +x /usr/local/elasticsearch-6.1.0/bin/*
RUN chown -R es:es /var/log/elasticsearch/
RUN chown -R es:es /data/behavior/log-node1/
RUN sed -i "s/-Xms1g/-Xms2g/g" /usr/local/elasticsearch-6.1.0/config/jvm.options
RUN sed -i "s/-Xmx1g/-Xmx2g/g" /usr/local/elasticsearch-6.1.0/config/jvm.options
EXPOSE 9200
EXPOSE 9300
CMD su es /usr/local/elasticsearch-6.1.0/bin/elasticsearch
复制代码
2.4、构建Elasticsearch镜像
[root@docker elasticsearch]# docker build -t elasticsearch .
复制代码
三、基于Dockerfile构建Kibana镜像
执行步调如下:
3.1、创建Kibana工作目录
[root@docker ~]# mkdir -p /root/elk/kibana
复制代码
3.2、上传资源到指定工作目录
上传kibana的源码包到/root/elk/kibana目录下
[root@docker ~]# ll /root/elk/kibana/
total 64404
-rw-r--r-- 1 root root 65947685 Jun 6 23:09 kibana-6.1.0-linux-x86_64.tar.gz
复制代码
3.3、编写Dockerfile文件
[root@docker ~]# cd /root/elk/kibana/
[root@docker kibana]# cat Dockerfile
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD kibana-6.1.0-linux-x86_64.tar.gz /usr/local/
RUN cd /usr/local/kibana-6.1.0-linux-x86_64
RUN sed -i "s/#server.name: "your-hostname"/server.name: "kibana-hostname"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/#server.port: 5601/server.port: "5601"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/#server.host: "localhost"/server.host: "0.0.0.0"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -ri '/elasticsearch.url/ s/^#|"//g' /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/localhost:9200/elasticsearch:9200/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
EXPOSE 5601
CMD ["/usr/local/kibana-6.1.0-linux-x86_64/bin/kibana"]
复制代码
3.4、构建Kibana镜像
[root@docker kibana]# docker build -t kibana .
复制代码
四、基于Dockerfile构建Logstash镜像
执行步调如下
4.1、创建Logstash工作目录
[root@docker ~]# mkdir -p /root/elk/logstash
复制代码
4.2、编写Dockerfile文件
[root@docker ~]# cd /root/elk/logstash/
[root@docker logstash]# cat Dockerfile
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD logstash-6.1.0.tar.gz /usr/local/
RUN cd /usr/local/logstash-6.1.0/
ADD run.sh /run.sh
RUN chmod 755 /*.sh
EXPOSE 5044
CMD ["/run.sh"]
复制代码
4.3、创建CMD运行的脚本文件
[root@docker logstash]# cat run.sh
#!/bin/bash
/usr/local/logstash-6.1.0/bin/logstash -f /opt/logstash/conf/nginx-log.conf
复制代码
4.4、上传资源到指定工作目录
上传logstash的源码包到/root/elk/logstash目录下,所需文件如下
[root@docker logstash]# ll
total 107152
-rw-r--r-- 1 root root 230 Jun 7 00:41 Dockerfile
-rw-r--r-- 1 root root 109714065 Jun 7 00:40 logstash-6.1.0.tar.gz
-rw-r--r-- 1 root root 88 Jun 7 00:42 run.sh
复制代码
4.5、构建Logstash镜像
[root@docker logstash]# docker build -t logstash .
复制代码
4.6、logstash配置文件详解
logstash功能非常强大,不仅仅是分析传入的文本,还可以作监控与告警之用。现在介绍logstash的配置文件其使用履历
logstash默认的配置文件不必要修改,只必要启动的时间指定一个配置文件即可!好比run.sh脚本中指定/opt/logstash/conf/nginx-log.conf。留意:文件包含了input、filter、output三部分,其中filter不是必须的
[root@docker ~]# mkdir -p /opt/logstash/conf
[root@docker ~]# vim /opt/logstash/conf/nginx-log.conf
input {
beats {
port => 5044
}
}
filter {
if "www-bdqn-cn-pro-access" in [tags] {
grok {
match => {"message" => '%{QS:agent} "%{IPORHOST:http_x_forwarded_for}" - \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version})?|-)" %{NUMBER:response} %{NUMBER:bytes} %{QS:referrer} %{IPORHOST:remote_addr}:%{POSINT:port} %{NUMBER:remote_addr_response} %{BASE16FLOAT:request_time}'}
}
}
urldecode {all_fields => true}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
useragent {
source => "agent"
target => "ua"
}
}
output {
if "www-bdqn-cn-pro-access" in [tags] {
elasticsearch {
hosts => ["elasticsearch:9200"]
manage_template => false
index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
}
}
}
# 注意:使用nginx-log.conf文件拷贝时,match最长的一行自动换行问题
复制代码
4.6.1、关于filter部分
输入和输出在logstash配置中是很简朴的一步,而对数据进行匹配过滤处置惩罚显得复杂。匹配当行日志是入门水平必要掌握的,而多行甚至不规则的日志则必要ruby的协助。本例主要展示grok插件
以下是某生产环境nginx的access日志格式
log_format main '"$http_user_agent""$http_x_forwarded_for" '
'$remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'$upstream_addr $upstream_status $upstream_response_time';
复制代码
下面是对应上述nginx日志格式的grok捕捉语法
'%{QS:agent} "%{IPORHOST:http_x_forwarded_for}" - \[%{HTTPDATE:timestamp}\]
"(?:%{WORD:verb} %{NOTSPACE:request}(?:
HTTP/%{NUMBER:http_version})?|-
)"%{NUMBER:response}%{NUMBER:bytes}%{QS:referrer}%{IP
ORHOST:remote_addr}:%{POSINT:port}
%{NUMBER:remote_addr_response}%{BASE16FLOAT:request_ time}'
复制代码
在filter段内的第一行是判断语句,如果www-bdqn-cn-pro-access自界说字符在tags内,则使用grok段内的语句对日志进行处置惩罚
geopi:使用GeoIP数据库对client_ip字段的IP地点进行解析,可得出该IP的经纬度、国家与都会等信息,但准确度不高,这主要依赖于GeoIP数据库
date:默认环境下,Elasticsearch内记载的date字段是Elasticsearch接收到该日志的时间,但在实际应用中必要修改为日志中所记载的时间。这时,必要指定记载时间的字段并指定时间格式。如果匹配成功,则会将日志的时间替换至date字段中
useragent:主要为webapp提供的解析,可以解析现在常见的一些useragent
4.6.2、关于output部分
logstash可以在上层配置一个负载调度器实现聚集。在实际应用中,logstash服务必要处置惩罚多种不同类型的日志或数据。处置惩罚后的日志或数据必要存放在不同的Elasticsearch聚集或索引中,必要对日志进行分类
output {
if "www-bdqn-cn-pro-access" in [tags] {
elasticsearch {
hosts => ["elasticsearch:9200"]
manage_template => false
index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
}
}
}
复制代码
通过在output配置中设定判断语句,将处置惩罚后的数据存放到不同的索引中。而这个tags的添加有以下三种途径:
在Filebeat读取数据后,向logstash发送前添加到数据中
logstash处置惩罚日志的时间,向tags标签添加自界说内容
在logstash接收传入数据时,向tags标签添加自界说内容
从上面的输入配置文件中可以看出,这里来采用的第一种图形,在Filebeat读取数据后,向logstash发送数据前添加www-bdqn-cn-pro-access的tag
这个操纵除非在后续处置惩罚数据的时间手动将其删除,否则将永久存在该数据中
Elasticsearch字段的各参数意义如下:
hosts:指定Elasticsearch地点,如有多个节点可用,可以设置为array模式,可实现负载平衡
manage_template:如果该索引没有合适的模板可用,默认环境下将由默认的模板进行管理
index:只当存储数据的索引
五、基于Dockerfile构建Filebeat镜像
执行步调如下:
5.1、创建Filebeat工作目录
[root@docker ~]# mkdir -p /root/elk/Filebeat
复制代码
5.2、编写Dockerfile文件
[root@docker ~]# cd /root/elk/Filebeat/
[root@docker Filebeat]# cat Dockerfile
FROM centos:7
MAINTAINER wzh@kgc.com
ADD filebeat-6.1.0-linux-x86_64.tar.gz /usr/local/
RUN cd /usr/local/filebeat-6.1.0-linux-x86_64
RUN mv /usr/local/filebeat-6.1.0-linux-x86_64/filebeat.yml /root
COPY filebeat.yml /usr/local/filebeat-6.1.0-linux-x86_64/
ADD run.sh /run.sh
RUN chmod 755 /*.sh
CMD ["/run.sh"]
复制代码
5.3、创建CMD运行的脚本文件
[root@docker Filebeat]# cat run.sh
#!/bin/bash
/usr/local/filebeat-6.1.0-linux-x86_64/filebeat -e -c /usr/local/filebeat-6.1.0-linux-x86_64/filebeat.yml
复制代码
5.4、上传资源到指定工作目录
上传Filebeat的源码包和Filebeat配置文件到/root/elk/filebeat目录下,所需文件如下
[root@docker Filebeat]# ll
total 11660
-rw-r--r-- 1 root root 312 Jun 7 01:11 Dockerfile
-rw-r--r-- 1 root root 11926942 Jun 7 01:09 filebeat-6.1.0-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 186 Jun 7 01:14 filebeat.yml
-rw-r--r-- 1 root root 118 Jun 7 01:12 run.sh
复制代码
5.5、构建Filebeat镜像
[root@docker Filebeat]# docker build -t filebeat .
复制代码
5.6、Filebeat.yml文件详解
Filebeat配置我呢见详解查看Filebeat的配置文件
[root@docker Filebeat]# cat filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/nginx/www.bdqn.cn-access.log
tags: www-bdqn-cn-pro-access
clean_*: true
output.logstash:
hosts: ["logstash:5044"]
# 每个Filebeat可以根据需求的不同拥有一个或多个prospectors。其他配置信息含义如下:
1、input_type:输入的内容,主要为逐行读取的log格式与标准输入stdin
2、paths:指定需要读取的日志的路径,如果路径拥有相同的结构,则可以使用通配符
3、tags:为该路径的日志添加自定义tags
4、clean_:Filebeat在/var/lib/filebeat/registry下有个注册表文件,它记录着Filebeat读取过的文件,还有已经读取的行数等信息。如果日志文件是定时分割,而且数量会随之增加,那么该注册表文件也会慢慢增大。随着注册表的增大,会导致Filebeat检索的性能下降
5、output.logstash:定义内容输出的路径,这里主要输出到Elasticsearch
6、hosts:只当服务地址
复制代码
六、启动Nginx容器作为日志输入源
使用docker run下令启动一个nginx容器
[root@docker ~]# docker run -itd -p 80:80 --network elk-kgc -v /var/log/nginx:/var/log/nginx --name nginx-elk nginx:latest
复制代码
本地目录/var/log/nginx必须挂载到Filebeat容器中,让Filebeat可以采集到日目录
手动模仿生产环境几条日志文件作为nignx容器所产生的站点日志,同样留意拷贝的时间换行问题
[root@docker nginx]# cat www.bdqn.cn-access.log
"YisouSpider" "106.11.155.156" - [18/Jul/2020:00:00:13 +0800] "GET /applier/position?gwid=17728&qyid=122257 HTTP/1.0" 200 9197 "-" 192.168.10.131:80 2000.032
"-""162.209.213.146" - [18/Jul/2020:00:02:11 +0800] "GET //tag/7764.shtml HTTP/1.0" 200 24922 "-" 192.168.10.131:80 200 0.074
"YisouSpider" "106.11.152.248" - [18/Jul/2020:00:07:44+0800] "GET /news/201712/21424.shtml HTTP/1.0" 200 8821 "-" 192.168.10.131:80 2000.097
"YisouSpider" "106.11.158.233" - [18/Jul/2020:00:07:44+0800] "GET /news/201301/7672.shtml HTTP/1.0" 200 8666 "-" 192.168.10.131:80 2000.111
"YisouSpider" "106.11.159.250" - [18/Jul/2020:00:07:44+0800] "GET /news/info/id/7312.html HTTP/1.0" 200 6617 "-" 192.168.10.131:80 2000.339
"Mozilla/5.0 (compatible;SemrushBot/2~bl;+http://www.semrush.com/bot.html)" "46.229.168.83" - [18/Jul/2020:00:08:57+0800] "GET /tag/1134.shtml HTTP/1.0"2006030"-"192.168.10.131:80 200 0.079
复制代码
七、启动Filebeat+ELK日志收集环境
留意启动顺序和查看启动日志
7.1、启动Elasticsearch
[root@docker ~]# docker run -itd -p 9200:9200 -p 9300:9300 --network elk-kgc -v /var/log/elasticsearch:/var/log/elasticsearch --name elasticsearch elasticsearch
复制代码
7.2、启动Kibana
[root@docker ~]# docker run -itd -p 5601:5601 --network elk-kgc --name kibana kibana:latest
复制代码
7.3、启动Logstash
[root@docker ~]# docker run -itd -p 5044:5044 --network elk-kgc -v /opt/logstash/conf:/opt/logstash/conf --name logstash logstash:latest
复制代码
7.4、启动Filebeat
[root@docker ~]# docker run -itd --network elk-kgc -v /var/log/nginx:/var/log/nginx --name filebeat filebeat:latest
复制代码
八、Kibana Web管理
由于kibana的数据必要从Elasticsearch中读取,以是必要Elasticsearch中有数据才能创建索引,创建不同的索引区分不同的数据集
8.1、访问Kibana
浏览器输入http://192.168.93.165:5601访问kibana控制台。在Management中找到Indexpatterns,单击进去可以看到类似以下图片中的界面,填写www-bdqn-cn-pro-access-*
在TimeFilterfieldname选项框中选中@timestemp这个选项。在kibana中,默认通过期间来排序。如果将日志存放入Elasticsearch的时间没有指定@timestamp字段内容,则Elasticsearch会分配接收到的日志时的时间作为该日志@timestamp的值
单击**“Createindexpattern”**按钮,创建www-bdqn-cn-pro-access索引后界面结果如下
单击“
Discover
”标签,大概会看不到数据。必要将时间轴选中为“Thisyear”才可以看到的内容
九、Kibana图示分析
打开kibana的管理姐买你,单击“visualize”标签——Create a visualization,选择饼状图pie,添加索引www-bdqn-cn-por-access-*,点开SplitSlices,选中Terms,再从FieId选中messagekeyword,最后点击上面三角按钮即可生成可访问最多的5个公网IP地点
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
万有斥力
金牌会员
这个人很懒什么都没写!
楼主热帖
解密PC微信数据库:深入探索与实用代价 ...
阿里巴巴Java开发手册(全册四版) ...
几个函数的使用例子:更新VBRK-XBLNR, ...
OpenJDK和OracleJDK的区别说明
EFCore 动态拼接查询条件(表达式树方式 ...
2022年混过的那些SAP项目
docker实战
LeetCode 力扣 205. 同构字符串
跨域攻击的方法介绍
spring aware接口具有什么功能呢? ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表