Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
为什么用到ELK:
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据 分析-可以支持 UI 分析 警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
ELK+Filebeat简介
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件实现日志采集、分析、展示,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
Filebeat隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据) Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) Filebeat(搜集文件数据) Winlogbeat(搜集 Windows 事件日志数据)
先看下效果
file下面开始搭建
一. 架构图
图片来源于网络二. Docker安装ElasticSearch
2.1 官网安装
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.1
2.2 设置参数
在elasticsearch的docker版本文档中,官方提到了vm.max_map_count的值在生产环境最少要设置成262144。设置的方式有两种
永久性的修改,在/etc/sysctl.conf文件中添加一行:grep vm.max_map_count /etc/sysctl.conf # 查找当前的值。
vm.max_map_count=262144 # 修改或者新增file正在运行的机器:
sysctl -w vm.max_map_count=262144
2.3 创建本地挂载数据与配置文件
数据储存路径mkdir -p /usr/local/src/docker/es/data配置文件路径
/usr/local/elk/es/config/elasticsearch.yml
2.3 修改配置文件
elasticsearch.yml# 配置es的集群名称 cluster.name: "docker-cluster" # 0.0.0.0为不限制,生产环境请设置为固定IP network.host: 0.0.0.0 # 开启x-pack安全验证 访问时需要密码 xpack.security.enabled: true # 关闭跨域验证(可以不开启) http.cors.enabled: true http.cors.allow-origin: "*"参数说明:
xpack.security.enabled: true
es从6.3之后内置了xpack模块,但是是默认关闭的
2.4 启动命令
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /usr/local/src/elk/es/data:/usr/share/elasticsearch/data -v /usr/local/src/elk/es/config/elasticsearch.yml://usr/share/elasticsearch/config/elasticsearch.yml --privileged=true docker.elastic.co/elasticsearch/elasticsearch:7.3.1file
把宿主机es挂载的data目录的权限开启就行了 chmod 777 /usr/local/src/elk/es/data
2.5 设置密码
# docker 进入容器 docker exec -it es /bin/bash # 修改密码 [root@g50 elasticsearch]# bin/elasticsearch-setup-passwords interactive
elastic,
apm_system,
kibana,
logstash_system,
beats_system,
remote_monitoring_user等密码是一起修改的
2.6 测试是否成功
访问前,确保防火墙或安全组已经设置好
打开浏览器输入
ip:9200即可 file
可以看到需要验证用户密码,输入刚刚设置的密码即可
用户名: elastic 密码: xxxx成功后会看到以下内容 file
OK! es安装完毕
三. 安装Logstsh
3.1 拉取官方镜像
docker pull docker.elastic.co/logstash/logstash:7.6.1file
3.2 创建挂载数据与配置文件
mkdir -p /usr/local/src/elk/logstash/config touch /usr/local/src/elk/logstash/config/logstash.conf touch /usr/local/src/elk/logstash/config/logstash.yml
3.3 修改配置文件
logstash.conf
logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter。
从input读取事件源,(经过filter解析和处理之后),从output输出到目标存储库(elasticsearch或其他)
filelogstash.conf配置详情
file我这里配置的是要处理logback日志文件
input { beats { port => 5044 ssl => false } } filter { grok { # 筛选过滤 match => { "message" => "(?<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}) %{GREEDYDATA:thread} %{LOGLEVEL:level} %{GREEDYDATA:class} - (?<msg>.*)" } remove_field => ["message"] } # 不匹配正则则删除,匹配正则用=~ if [level] !~ "(ERROR|WARN|INFO)" { # 删除日志 drop {} } } output { stdout { codec => rubydebug #控制台输出处理过后的数据 } if [fields][logtype] == "pre"{ elasticsearch { hosts => ["ip:9200"] user => elastic password => xxx index => "pre" } } if [fields][logtype] == "prex"{ elasticsearch { hosts => ["ip:9200"] user => elastic password => xxx index => "prex" } } }注:
input 这里其实把logstash作为服 务,开启5044端口接收filebeat发出的消息
filter 主要用来过滤日志文件处理成我们需要的数据
grok 解析文本并构造 把非结构化日志数据通过正则解析成结构化和可查询化
output 采集的日志要进行输出,将事件发送到特定目标 ,我这里配置的es,并使用账号密码
备注:
官方提供了很多正则的grok pattern可以直接使用: :
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns
grok debug工具:
http://grokdebug.herokuapp.com
正则表达式调试工具:
https://www.debuggex.com/
grok 里边有定义好的现场的模板你可以用,但是更多的是自定义模板,规则是这样的,小括号里边包含所有一个key和value,例子:(?<key>value),比如以下的信息,第一个我定义的key是data,表示方法为:?<key> 前边一个问号,然后用<>把key包含在里边去。value就是纯正则了,这个我就不举例子了。这个有个在线的调试库,可以供大家参考, http://grokdebug.herokuapp.com/我这里是按照JAVA日志格式进行编写的
{ "date": [ [ "2019-09-21 20:34:09.318" ] ], "thread": [ [ "[XNIO-1 task-39]" ] ], "level": [ [ "DEBUG" ] ], "class": [ [ "com.xd.pre.modules.sys.mapper.SysLogMapper.insert" ] ], "msg": [ [ "- ==> Parameters: 103.134.198.167(String), 1(Integer), admin(String), 查询用户集合(String), getList(String), /user(String), [com.baomidou.mybatisplus.extension.plugins.pagination.Page@1cb5e16a, UserDTO(userId=null, username=, password=null, deptId=0, jobId=null, phone=null, email=null, avatar=null, lockFlag=null, delFlag=null, roleList=null, deptList=null, newPassword=null, smsCode=null)](String), Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36(String), com.xd.pre.modules.sys.controller.SysUserController(String), GET(String), 2019-09-21T20:34:08.905(LocalDateTime), 2019-09-21T20:34:08.905(LocalDateTime), 0(Long)" ] ] }
logstash.yml
file# 不受限限制访问 http.host: 0.0.0.0 # 使用了es安全认证所以要配置es相关信息 xpack.monitoring.elasticsearch.hosts: - http://ip:9200 # 使用x-pack安全认证 xpack.monitoring.enabled: true # es账号 xpack.monitoring.elasticsearch.username: "elastic" # es密码 xpack.monitoring.elasticsearch.password: "xxx"
4. 启动命令
docker run -p 5044:5044 \ --name logstash -d \ -v /usr/local/src/elk/logstash/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw \ -v /usr/local/src/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:rw \ docker.elastic.co/logstash/logstash:7.6.1file
5. 查看启动日志
docker logs -f logstash启动成功 file
四. 安装Kibana
4.1 安装
拉取官方镜像
docker pull docker.elastic.co/kibana/kibana:7.6.1
4.2 创建文件夹和配置文件
mkdir /usr/local/src/elk/kibana mkdir /usr/local/src/elk/kibana/config touch /usr/local/src/elk/kibana/config/kibana.yml
4.3 修改配置
vim /usr/local/src/elk/kibana/config/kibana.ymlfile配置文件
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://elasticsearch:9200" ] elasticsearch.username: elastic elasticsearch.password: xxx xpack.monitoring.ui.container.elasticsearch.enabled: true #汉化 i18n.locale: "zh-CN"
4.4 启动命令
docker run -d -p 5601:5601 \ --name=kibana \ -v /usr/local/src/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \ docker.elastic.co/kibana/kibana:7.6.1使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址,这样我们就直接通过定义的name来访问es服务
4.5 启动测试
打开浏览器访问
ip:5601file
然后输入账号密码即可
file五. Filebeat
5.1 安装
拉取官方镜像
pull docker.elastic.co/beats/filebeat:7.6.1
5.2 在宿主机创建文件夹和文件
mkdir -p /usr/local/src/elk/filebeat/data mkdir -p /usr/local/src/elk/filebeat/config touch /usr/local/elk/filebeat/config/filebeat.yml
5.3 修改配置文件
filefilebeat.ymlfilebeat.inputs: - input_type: log enable: true paths: # 采集日志的路径这里是容器内的path - /Users/lihaodong/Desktop/log/** multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after multiline.timeout: 10s # 为每个项目标识,或者分组,可区分不同格式的日志 tags: ["pre-logs"] # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志 registry_file: /usr/share/filebeat/data/ fields: logsource: node1 logtype: pre # 输出到logstash中,logstash更换为自己的ip output.logstash: enabled: true hosts: ["ip:5044"]注: Logstash的配置
output: logstash: hosts: ["ip:5044"] worker: 2 loadbalance: true index: filebeat 这里worker 的含义,是 beat 连到每个 host 的线程数。 在 loadbalance 开启的情况下,意味着有 4 个worker 轮训发送数据
5.4 启动命令
docker run --name filebeat -d \ -v /Users/lihaodong/Desktop/log:/Users/lihaodong/Desktop/log \ -v /usr/local/src/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \ -v /usr/local/src/elk/filebeat/data:/usr/share/filebeat/data \ docker.elastic.co/beats/filebeat:7.6.1
5.5 查看启动日志是否成功
docker logs -f filebeatfile从日志中看到文件夹没有权限,需要在宿主机给与权限
chmod 777 /usr/local/src/elk/filebeat/data删掉容器,重新启动 file
OK! 到现在为止,基础软件安装完毕!
再次查看日志,看下是否在收集
docker logs -f filebeatfile看样子 已经在我们所配置的路径进行收集日志并发送到logstsh了
六. kibana操作说明
创建索引模式,以便我们可以查看日志信息
file file file fileOK! 大量的日志已经储存进来
七. 总结
本文章主要架构为:
filebeat读取
logback日志文件,发送到
logstash,再由
logstash发送到
es进行储存,最终
kibana展示
可以做到代码无侵入性,随时用随时撤
注意: 软件启动顺序,先启动
es,再启动
kibana,
logstash,
filebeat
具体详细的介绍大家可以查一下资料,具体业务具体对待 往期推荐 ????Docker 入门到实战教程(一)介绍DockerDocker 入门到实战教程(二)安装Docker
Docker 入门到实战教程(三)镜像和容器
Docker 入门到实战教程(四)容器链接
Docker 入门到实战教程(五)构建Docker镜像
Docker 入门到实战教程(六)Docker数据卷
Docker 入门到实战教程(七)安装RedisDocker 入门到实战教程(八)安装Mysql
Docker 入门到实战教程(九)安装Nginx
Docker入门到实战教程(十)部署Spring Boot项目
Docker 入门到实战教程(十一)部署Vue+SpringBoot 前后端分离项目
- 点赞
- 收藏
- 分享
- 文章举报
- docker版ELK(ElasticSearch+Logstash+ Kibana)+filebeat日志分析平台的搭建(二)之filebeat+logstash的配置
- docker版ELK(ElasticSearch+Logstash+ Kibana)+filebeat日志分析平台的搭建(一)
- elk + kafka + filebeat搭建日志分析系统
- Filebeat+ELK搭建日志实时分析系统
- ELK + Filebeat 搭建日志系统
- Linux搭建ELK日志收集系统:FIlebeat+Redis+Logstash+Elasticse
- 1-ELK安装及使用教程(搭建日志分析系统)
- 6.3.1版本elk+redis+filebeat收集docker+swarm日志分析
- ELK+Filebeat搭建实时日志分析平台
- 快速使用docker搭建ELK日志分析系统
- ELK+FileBeat日志分析系统
- ELK+filebeat日志分析系统部署文档
- ELK+filebeat日志分析系统部署文档
- 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)
- ELK+Zookeeper+Kafka+Filebeat日志分析系统
- 基于docker 搭建elk日志分析系统
- ELK+fileBeat 日志系统搭建
- ELK + Filebeat 搭建日志系统
- Ubuntu 14.04搭建ELK日志分析系统(Elasticsearch+Logstash+Kibana)