主要内容:
搭建Logstash完成ELK集群、实现Web日记及时分析
一、Logstash介绍
Logstash 是一个开源的服务器端数据处置惩罚管道,能够同时从多个来源采集数据,转换数据,并将数据发送到你指定的存储库中。它通常与 Elasticsearch 和 Kibana 一起使用,构成 ELK 技术栈,用于日记分析、数据网络和处置惩罚等场景。
特点:
- ① 所有类型的数据会集处置惩罚;
- ② 差别模式和格式数据的正常化;
- ③ 自定义日记格式的敏捷扩展;
- ④ 为自定义数据源轻松添加插件;
主要功能:
1)数据采集:
输入插件:Logstash 支持多种输入插件,可以从文件、数据库、消息队列、日记文件、网络端口等多种来源采集数据。
示例:
- file 插件:从文件中读取数据。
- beats 插件:从 Beats 代理(如 Filebeat、Metricbeat)接收数据。
- syslog 插件:从 Syslog 服务器接收日记数据。
2)数据转换:
过滤器插件:Logstash 提供了丰富的过滤器插件,用于解析、转换和丰富数据。
示例:
- grok 插件:解析非结构化数据,将其转换为结构化数据。
- mutate 插件:对字段进行重定名、删除、替换等操作。
-date 插件:解析日期字段,并将其设置为事故的时间戳。
3)数据输出:
输出插件:Logstash 支持多种输出插件,可以将处置惩罚后的数据发送到 Elasticsearch、文件、数据库、消息队列等多种目的。
示例:
- elasticsearch 插件:将数据发送到 Elasticsearch 进行存储和分析。
- file 插件:将数据写入文件。
- stdout 插件:将数据输出到标准输出,通常用于调试。
1、Logstach的工作结构
Logstash 的设置文件通常由三个主要部门组成:input、filter 和 output。
- input {
- # 输入插件配置
- }
- filter {
- # 过滤器插件配置
- }
- output {
- # 输出插件配置
- }
复制代码 简朴的 Logstash 设置示例:
从文件中读取日记数据,解析日记,并将解析后的数据发送到 Elasticsearch
- input {
- file {
- path => "/var/log/myapp.log"
- start_position => "beginning"
- sincedb_path => "/dev/null"
- }
- }
- filter {
- grok {
- match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
- }
- date {
- match => [ "timestamp", "ISO8601" ]
- target => "@timestamp"
- }
- }
- output {
- elasticsearch {
- hosts => ["http://localhost:9200"]
- index => "myapp-logs-%{+YYYY.MM.dd}"
- }
- stdout { codec => rubydebug }
- }
复制代码
2、Logstash的数据类型
数据类型
| 示例
| 布尔值类型
| ssl_enable => true
| 字节类型
| bytes => “1MiB”
| 字符串类型
| name => “xkops”
| 数值类型
| prot => 22
| 数组
| match => [“datetime”,”UNIX”]
| 哈希(键值对)
| options => { k => “v”, k2 => “v2”}
| 注释
| #
|
3、Logstash的语法
语法
| 阐明
| ==
| 等于
| !=
| 不等于
| <
| 小于
| >
| 大于
| | 小于等于
| >=
| 大于等于
| =~
| 匹配正则
| !~
| 不匹配正则
| in
| 包含
| not in
| 不包含
| and
| 与
| or
| 或
| nand
| 非与
| xor
| 非或
|
4、ELK架构图例:
- 日记网络和分析:从多个来源网络日记数据,解析和转换数据,并将数据发送到 Elasticsearch 进行存储和分析。
- 数据清洗和转换:对原始数据进行清洗、转换和丰富,使其更得当后续分析和存储。
- 及时数据处置惩罚:及时处置惩罚和分析数据,支持及时监控和报警。
部署logstash示例:
① 设置主机名解析文件(包罗所有ES节点和本机的主机名)
② Logstash依赖JAVA环境,所以安装java-openjdk、Logstash软件包
③ Logstash没有默认设置文件,需手动设置
1)设置文件管理
- - 默认安装目次:/usr/share/logstash
- - 设置文件路径:/etc/logstash
留意:由于Logstash默认会在安装目次下寻找设置文件,所以需要将设置文件通过软连接关联到安装目次的路径下:# ln -s /etc/logstash /usr/share/logstash/config
- - 设置文件格式:(input、filter、output地区)
- - 启动Logstash下令: /usr/share/logstash/bin/logstash
- - 官方手册地址:Logstash Reference [8.15] | Elastic
步调1:安装logstash
① 购买1台云主机
主机名称
| IP地址
| 相关设置
| logstash
| 192.168.1.47
| 最低设置2核4G
|
② 设置主机名解析
- [root@logstash ~]# vim /etc/hosts
- 192.168.1.41 es-0001
- 192.168.1.42 es-0002
- 192.168.1.43 es-0003
- 192.168.1.44 es-0004
- 192.168.1.45 es-0005
- 192.168.1.47 logstash
复制代码 ③ 安装JAVA环境,及Logstash软件包
- [root@logstash ~]# yum install -y java-1.8.0-openjdk logstash
复制代码 ④ 将设置文件/etc/logstash/作为源路径,软链接方式到/usr/share/logstash/config
- [root@logstash ~]# ls /etc/logstash/
复制代码
- [root@logstash ~]# ln -s /etc/logstash/ /usr/share/logstash/config
- [root@logstash ~]# ls /usr/share/logstash/
复制代码
- [root@logstash ~]# ls /usr/share/logstash/config/
复制代码
⑤ 修改设置文件(手动设置)
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input { //日志数据输入区域
- stdin{} //stdin标准输入插件
- }
- filter{ } //数据过滤规则处理区域
- output{ //日志数据输出区域
- stdout{} //stdin标准输出插件
- }
复制代码 ⑥ 启动Logstash验证,测试效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
补充:任意输入字符进行测试,返回的是JSON格式的信息;
2)插件管理
上面的设置文件使用了 Logstash-input-stdin 和 Logstash-output-stdout 两个插件,Logstash对数据的处置惩罚依赖插件;
- - 管理下令: /usr/share/logstash/bin/logstash-plugin
① 安装插件install
② 删除插件uninstall
③ 查看插件list
例如:
- [root@logstash ~]# ls /usr/share/logstash/bin/
复制代码
- [root@logstash ~]# /usr/share/logstash/bin/logstash-plugin //执行管理命令
复制代码
- [root@logstash ~]# /usr/share/logstash/bin/logstash-plugin list //查看插件
- logstash-codec-json //logstash-codec-xxx编码格式插件
- logstash-filter-dns //logstash-filter-xxx只能用于filter段的插件
- logstash-input-stdin //logstash-input-xxx只能用于input段的插件
- logstash-output-stdout //logstash-output-xxx只能用于output段的插件
- …
复制代码 插件名用【-】分隔,logstash表示为Logstash的插件,插件使用地区,插件名;其中codec字符编码可以适用于所有地区。
步调2:插件与调试格式
① 编写设置文件,使用json格式字符串测试: {"a":"1", "b":"2", "c":"3"}
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- stdin{ codec => "json" } //标准输入,采用json编码格式输入
- }
-
- filter{ }
-
- output{
- stdout{ codec => "rubydebug" } //标准输出,采用rubydebug编码格式,可展现完整的数据格式(便于调试)
- }
复制代码 ② 启动Logstash验证,测试效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
在写设置文件时,标准输入地区的格式取决于数据源,一般标准输出地区的格式默认是rubydebug格式,便于阅读和调试;
二、插件的帮助手册
Logstash里面插件众多,差别的插件参数也差别,需要学会通过手册查找所需插件;
官方手册地址:Logstash Reference [8.15] | Elastic
1、input插件 设置管理
- - file插件,主要用途是从当地文件中获取数据,并及时监控文件的变化;
- - 焦点参数:
① path要监控的文件路径
path => [“/tmp/a.log”,”/tmp/b.log”]
② start_position第一次读取文件位置[beginning|end]
start_position => “beginning”
③ sincedb_path记录读取文件的位置(雷同书签)
sincedb_path => “/var/lib/logstash/sincedb-access”
④ type提供一个字符串标记
type => “testlog”
例如:
例如1:Logstash从当地文件中获取数据
# 查询插件的帮助手册,找到Input plugins中的file插件;
# 在file插件中找到该格式的模板
# 在file插件中找到Option,在Required选项中找到YES为必须设置(array为数组)
# 在array中,找到文件路径的Example;
# 修改设置文件①
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- stdin{ codec => "json" }
- file{ //使用file模块
- path => ["/tmp/a.log","/tmp/b.log"] //从本地文件中获取数据
- }
- }
- filter{ }
- output{
- stdout{ codec => "rubydebug" }
- }
- [root@logstash ~]# /usr/share/logstash/bin/logstash //启用Logstash
复制代码 # 打开另一个终端测试
- [root@logstash ~]# cd /tmp/
- [root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
- [root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log
复制代码 # 启动Logstash验证,测试效果
# 修改设置文件②
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- stdin{ codec => "json" }
- file{
- path => ["/tmp/a.log"]
- type => "is apache" //字符串标签,用来区分不同数据种类的手段
- }
- file{
- path => ["/tmp/b.log"]
- type => "is nginx"
- }
- }
- filter{ }
- output{
- stdout{ codec => "rubydebug" }
- }
-
- [root@logstash ~]# /usr/share/logstash/bin/logstash //启用Logstash
复制代码 # 打开另一个终端测试
- [root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
- [root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log
复制代码 # 启动Logstash验证,测试效果
补充:Logstash默认会创建书签文件,用来记录上一次读取数据文件的位置,默认存放在/var/lib/logstash/plugins/inputs/file/下;每次对Logstash重启,就会生成书签文件;需要指定书签文件,便于管理;
示例:input file插件
① 修改设置文件
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- file {
- path => ["/tmp/c.log"] //要监控的文件路径
- type => "test" //字符串标签,用来区分不同数据种类的手段
- start_position => "beginning" //第一次读取文件位置[beginning|end]
- sincedb_path => "/var/lib/logstash/sincedb" //记录读取文件的位置
- }
- }
- filter{ }
- output{
- stdout{ codec => "rubydebug" }
- }
复制代码 补充:beginning从开头读取文件
② 删除默认书签文件
- [root@logstash ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_*
复制代码 ③ 启动Logstash验证,测试效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
2、filter插件设置管理
- - grok插件,用来解析各种非结构化的日记数据插件;
- - grok使用正则表达式把非结构化的数据结构化在分组匹配;
- - 正则表达式需要根据具体数据结构编写(适用性极广)
① 正则表达式分组匹配格式:(自定义)
调用格式:(?正则表达式)
② 正则表达式宏调用格式:(官方宏文件)
调用格式:%{宏名称:名字}
- grok自带宏文件路径:/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns
例如:
补充:为WEB服务器重建ELB负载均衡器,开启获取客户端IP功能
- [root@logstash ~]# cat /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd //查看httpd相关的宏文件
复制代码
示例:filter grok插件
- [root@logstash ~]# echo '192.168.1.252 - - [29/Jul/2020:14:06:57 +0800] "GET /info.html HTTP/1.1" 200 119 "-" "curl/7.29.0"' >/tmp/c.log
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- file {
- path => ["/tmp/c.log"] //要监控的文件路径
- type => "test" //字符串标签
- start_position => "beginning" //第一次读取文件位置[beginning|end]
- sincedb_path => "/dev/null" //记录读取文件的位置(devnull),可反复读取测试
- }
- }
- filter{
- grok {
- match => { "message" => "%{HTTPD_COMBINEDLOG}" } //使用宏解析Apahce默认日志格式
- }
- }
- output{
- stdout{ codec => "rubydebug" }
- }
复制代码 # 启动Logstash,查看效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
3、output插件设置管理
- - elasticsearch插件是日记分析体系的数据输出插件,主要用途是把filter处置惩罚过的json数据写入到elasticsearch集群中;
- - 焦点参数:
① host elasticsearch节点的地址,数组格式:
host => [“es-0004:9200”,”es-0005:9200”]
② index存储数据索引的名称:
index => “weblog”
③ index还支持按日期生成索引,其中YYYY表示年,MM表示月份,dd表示日期:
index => “weblog-%{+YYYY.MM.dd}”
例如:
示例:output elasticsearch插件
① 修改设置文件
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- file {
- path => ["/tmp/c.log"]
- type => "test"
- start_position => "beginning"
- sincedb_path => "/dev/null"
- }
- }
- filter{
- grok {
- match => { "message" => "%{HTTPD_COMBINEDLOG}" }
- }
- }
- output{
- stdout{ codec => "rubydebug" }
- elasticsearch {
- hosts => ["es-0004:9200", "es-0005:9200"] //指定ES集群节点地址
- index => "weblog-%{+YYYY.MM.dd}" //按日期生成索引(宏)
- }
- }
复制代码 ② 启动Logstash,查看效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
③ 通过浏览器访问HEAD页面,连接并查看ES集群elasticsearch插件生成的索引
三、WEB日记及时分析
1、远程获取WEB日记(filebeat服务,ELK、EFK)
由于Logstash依赖JAVA环境,而且占用资源非常大,因此在每一台WEB服务器上部署Logstash非常不符合,为了实现让WEB服务器(或WEB集群)能够将日记数据远程发送给Logstash,可以使用更轻量的filebeat软件网络日记,通过网络给Logstash发送数据,而Logstash使用beats接收日记,完成数据分析;
Logstash接收日记(beats插件)
接收日记必须监听网络服务,Logstash可以通过beats插件接收filebeat发送过来的数据;
例如:
2、filebeat安装设置
- - 软件包:filebeat
- - 设置文件路径:/etc/filebeat/filebeat.yml
- - 修改设置文件
示例:filebeat设置
1)Logstash设置beats插件(服务端)
2)WEB服务器安装filebeat(客户端)
3)启动服务并验证;
- 验证:grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml
- 启动服务: systemctl enable --now filebeat
步调1:logstash beats插件(Logstash操作)
① 修改设置文件
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- file {
- path => ["/tmp/c.log"]
- type => "test"
- start_position => "beginning"
- sincedb_path => "/var/lib/logstash/sincedb"
- }
- beats {
- port => 5044 //指定监听端口
- }
- }
- filter{
- grok {
- match => { "message" => "%{HTTPD_COMBINEDLOG}" }
- }
- }
- output{
- stdout{ codec => "rubydebug" }
- elasticsearch {
- hosts => ["es-0004:9200", "es-0005:9200"]
- index => "weblog-%{+YYYY.MM.dd}"
- }
- }
复制代码 ② 启动logstash,查看效果
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
- [root@logstash ~]# ss -nlptu | grep 5044
- tcp LISTEN 0 1024 [::]:5044 [::]:* users:(("java",pid=1372,fd=104))
复制代码
步调2:web服务安装filebeat(web操作)
① 安装filebeat软件
- [root@web ~]# yum install -y filebeat
- [root@web ~]# vim /etc/filebeat/filebeat.yml
- 24: enabled: true //打开收集模块
- 28: - /var/log/httpd/access_log //自定义读取日志路径,-为数组,表示可以写多个(支持通配符)
- 45: fields: //自定义标签
- 46: my_type: apache //区分日志的种类
- 148, 150 注释掉
- 161: output.logstash: //设置输出模块
- 163: hosts: ["192.168.1.47:5044"] //指定Logstahsh地址(输出给Logstash)
- 180, 181, 182 注释掉
复制代码 ② 查抄设置并启动服务
- [root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml
复制代码
- [root@web ~]# systemctl enable --now filebeat
复制代码 ③ 访问WEB服务器验证,查看logstash是否新增数据
浏览器访问:http://121.37.211.232/
四、网站日记分析实战
1)目的:
- 实现web日记流量及时分析
- 通过kibana绘制图表展示web访问环境
2)实行步调:
步调1:
- ① 在web服务器上安装filebeat,并把日记发送给Logstash
- ② Logstash使用beats模块接收日记
步调2:
- ① Logstash—input设置beats网络日记
- ② Logstash—filter对日记格式化
- ③ Logstash—output写入日记到elasticsearch
步调3:
- ① kibana从elasticsearch读取日记图表展示
步调1:Filebeat设置
① WEB服务器部署Filebeat(负责网络并远程数据给Logstash)
- [root@web ~]# yum install -y filebeat //安装软件
- [root@web ~]# vim /etc/filebeat/filebeat.yml //修改配置文件
- 24: enabled: true
- 28: - /var/log/httpd/access_log //-为数组,表示可以写多个(支持通配符)
- 45: fields:
- 46: my_type: apache //区分日志的种类
- 148, 150 注释掉
- 161: output.logstash:
- 163: hosts: ["192.168.1.47:5044"]
- 180, 181, 182 注释掉
- [root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml //检查配置文件
- [root@web ~]# systemctl enable --now filebeat
- [root@logstash ~]# ss -nlptu | grep 5044
- tcp LISTEN 0 1024 [::]:5044 [::]:* users:(("java",pid=1372,fd=104))
复制代码
步调2:Logstash设置
- Logstash input设置beats(负责接收Filebeat数据并进行数据分析)
- 通过自定义的fields标签,判断数据来源(采用正则表达式)
- [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
- input {
- beats {
- port => 5044
- }
- }
- filter{
- if [fields][my_type] == "apache"{ //判断标签为Apache
- grok {
- match => { "message" => "%{HTTPD_COMBINEDLOG}" }
- }}
- }
- output{
- stdout{ codec => "rubydebug" }
- if [fields][my_type] == "apache"{
- elasticsearch {
- hosts => ["es-0004:9200", "es-0005:9200"]
- index => "weblog-%{+YYYY.MM.dd}"
- }}
- }
- [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码
步调3:清空 elasticsearch 中数据
① 删除所有ES集群上面的index索引(库),开始验证(保留kibana运行设置信息的索引)
方法1:HEAD网页-动作(删除)
方法2: curl -XDELETE http://es-0001:9200/*
② 清空所有数据后,测试访问浏览器http://121.37.211.232/
步调4:设置Kibana(验证)
① 创建索引模式
# 选择timestamp
# 查看索引
# 新建可视化饼图
# 进行数据分片
# 使用另一个客户端,模拟测试访问
[root@ecs-proxy ~]# ab -c 200 -n 200 http://121.37.211.232/
小结:
本篇章节为【第五阶段】ARCHITECTURE-DAY2 的学习条记,这篇条记可以初步相识到 搭建Logstash完成ELK集群、实现Web日记及时分析。
Tip:毕竟两个人的聪明大于一个人的聪明,假如你不理解本章节的内容或需要相关条记、视频,可私信小安,请不关键羞和回避,可以向他人讨教,花点时间直到你真正的理解。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |