ELK 日志分析系统的搭建与基础使用
1. 概述
服务端
日志分析平台ELK是由Elasticsearch、Logstash和Kibana三个服务组成,Elasticsearch负责日志存储并提供搜索功能,Logstash负责日志收集,Kibana提供Web查询操作界面。
客户端
ELK日志推送客户端这里我们采用Filebeat,Filebeat通过ELK提供的api自动创建索引与数据流,然后推送日志数据到服务端。
接下来本门将介绍服务端和推送客户端的安装和配置。
2. 搭建ELK
使用docker compose进行安装ELK组件,在github上搜索docker-elk,选择第一个项目
选择main分支复制链接通过git下载(推荐),也可以通过wget下载压缩包,链接:https://github.com/deviantony/docker-elk.git
git clone https://github.com/deviantony/docker-elk.git
下载后进入目录
elasticsearch文件夹是elasticsearch配置文件
kibana文件夹是kibana配置文件
logstash文件夹是logstash配置文件
setup文件用于初始化.env中配置的elasticsearch用户名信息
.env文件为elasticsearch用户名信息
先修改配置文件,修改语言为中文。
cd docker-elk
vim kibana/config/kibana.yml
##修改kibana语言,编辑配置i18n.locale,或者在末尾新增
i18n.locale: "zh-CN"
##创建持久性密钥
xpack.encryptedSavedObjects.encryptionKey: '32位秘钥'
接下来在docker-compose.yml文件目录下执行以下命令
docker-compose build
docker-compose up
等待上述步骤完成之后在浏览器输入 http://服务器ip:5601
注意
这里需要提前打开几个端口,5601、9200、5044、9300
端口开放之后应该是可以正常访问的,如下图
初始默认账号密码为 elastic changeme
余下的后面再回来配置,接下来将介绍下载和配置Filebeat客户端
2. 搭建Filebeat
安装
从elastic官网下载最新的Filebeat rpm包,官网链接:https://www.elastic.co/cn/downloads/beats/filebeat
复制最新版下载链接,我这里是8.3.3,开始安装
代码
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.3.3-x86_64.rpm
rpm -ivh filebeat-8.3.3-x86_64.rpm
安装完成后查询安装目录
rpm -qc filebeat
如下图
编辑Filebeat配置文件
vim /etc/filebeat/filebeat.yml
配置input
为了手动配置Filebeat(代替用模块),你可以在filebeat.yml中的filebeat.inputs区域下指定一个inputs列表。
列表时一个YMAL数组,并且你可以指定多个inputs,相同input类型也可以指定多个。例如:
filebeat.inputs:
- type: log
enabled: true
paths: #文件读取路径,一个input可以有多个
- /www/wwwroot/dev/project/runtime/*/*/*/*.log
- /var/log/*
# 配置input识别字段
fields:
index: dev
# 用于控制Filebeat如何扩多行处理日志消息
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
- type: log
enabled: true
paths:
- /www/wwwroot/project/runtime/*/*/*/*.log
fields:
index: test
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
配置项
paths
例如:/var/log//.log 将会抓取/var/log子目录目录下所有.log文件。它不会从/var/log本身目录下的日志文件。如果你应用recursive_glob设置的话,它将递归地抓取所有子目录下的所有.log文件。
recursive_glob.enabled
允许将扩展为递归glob模式。启用这个特性后,每个路径中最右边的被扩展为固定数量的glob模式。例如:/foo/*扩展到/foo, /foo/, /foo/,等等。如果启用,它将单个扩展为8级深度*模式。这个特性默认是启用的,设置recursive_glob.enabled为false可以禁用它。
然后配置索引模板
在filebeat.yml配置文件的setup.template区域指定索引模板,用来设置在Elasticsearch中的映射。如果模板加载是启用的(默认的),Filebeat在成功连接到Elasticsearch后自动加载索引模板。
# 自定义索引必须要配置的一个参数,索引生命周期管理ilm默认开启,开启时默认索引名只能为filebeat-*;
setup.ilm.enabled: false
#模板的名字。默认是filebeat。Filebeat的版本总是跟在名字后面,所以最终的名字是 filebeat-%{[beat.version]}
setup.template.name: "xjd-dev-log"
# 模板的模式。默认模式是filebeat-*
setup.template.pattern: "xjd-*"
# 覆盖存在的模板
setup.template.overwrite: true
# 启用模板加载
setup.template.enabled: true
配置output
指定Elasticsearch作为output,让Filebeat通过Elasticsearch提供的HTTP API向其发送数据。
其中
index
索引名字。(PS:意思是要发到哪个索引中去)。默认是"filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"(例如,"filebeat-6.3.2-2017.04.26")。如果你想改变这个设置,你需要配置 setup.template.name 和 setup.template.pattern 选项。如果你用内置的Kibana dashboards,你也需要设置setup.dashboards.index选项。
indices
索引选择器规则数组,支持条件、基于格式字符串的字段访问和名称映射。如果索引缺失或没有匹配规则,将使用index字段,如下
output.elasticsearch:
# ES服务端ip,可以同时向多个服务端推送
hosts: ["elk服务端ip:9200"]
# ES的账号和密码
username: "elastic"
password: "cahngeme"
index: "xjd-%{[fields.index]}-*"
indices:
- index: "xjd-dev-%{+yyyy-MM-dd}"
when.equals:
fields:
index: "dev"
- index: "xjd-test-%{+yyyy-MM-dd}"
when.equals:
# 和inputs里面的配置对应
fields:
index: "test"
配置Kibana端点
setup.kibana:
host: "elk服务端ip:5601"
至此独立索引配置编辑成功,更多配置请参考文章:https://www.cnblogs.com/hanease/p/16029992.html
配置好以后,执行下面的命令
# 命令加载 Kibana 仪表板。如果仪表板已设置,请省略此命令。
sudo filebeat setup
如下图
# 启动 filebeat 服务
sudo service filebeat start
然后,在kibana的管理页面中就可以看到我们创建的索引和索引模板了。
首页 - 管理 - Stack Management - 数据 - 索引管理
3. 配置数据面板
创建索引模式
创建完成之后可以创建对应的查询和可视化面板了
至此ELK系统就完成部署了,可以设计自己的自定义可视化