当前位置: 首页 > news >正文

filebeat + logstash使用笔记

背景

本文中有2台主机:
(1)1.1.1.1是OpenStack的nova节点,安装filebeat
(2)1.1.1.2是logstash节点
在1.1.1.1上通过filebeat读取OpenStack的nova-compute组件日志(/var/log/nova/nova-compute.log)的增量日志送至logstash,处理后送至下一步环节(终端输出、写入文件、kafka、elasticsearch)。
nova-compute日志格式示例如下:

2023-05-10 23:21:53.513 7 INFO nova.virt.driver [req-59da3b8b-04ed-446d-8d3e-838d3918bdc8 - - - - -] Loading compute driver 'libvirt.LibvirtDriver'

日志格式为“日期 时间 进程id(网上未查到信息) 日志等级 代码模块 请求id 日志正文”。

filebeat

安装

本文从官网(https://www.elastic.co/cn/downloads/beats/filebeat)下载rpm包并安装。

rpm -ivh filebeat-8.13.0-x86_64.rpm

配置

修改/etc/filebeat/filebeat.yml如下:

filebeat.inputs:
- type: logenabled: truepaths:- /var/log/nova/nova-compute.logstart_position: endmultiline.pattern: '^\d{4}-\d{2}-\d{2}\s'multiline.negate: truemultiline.match: afterfields:hostip: 1.1.1.1service: novacomponent: nova-computefields_under_root: true
output.console:pretty: trueenable: true
output.logstash:hosts: ["1.1.1.2:5000"]

其中部分配置解释如下:
(1)start_position
start_position: end表示从末尾开始读取,则文件中原有的历史日志都会被忽略。
(2)multiline

multiline.pattern: '^\d{4}-\d{2}-\d{2}\s'
multiline.negate: true
multiline.match: after

针对日志正文可能出现的换行符情况,对不匹配^\d{4}-\d{2}-\d{2}\s正则表达式的行,追加至上一行后面。
(3)fields
通过fields新增三个字段hostip、service、component
(4)fields_under_root
将新增的三个字段hostip、service、component放置于json的顶层字段
(5)output.console
结果通过终端输出,注意如果使用systemcctl命令后台运行则不会输出,此配置只有前台运行才会生效
(6)output.logstash
输出至logstash

运行

用如下命令测试:

filebeat -e -c /etc/filebeat/filebeat.yml

由于配置中有output.console,通过终端输出示例如下:

{"@timestamp": "2024-07-31T13:35:24.159Z","@metadata": {"beat": "filebeat","type": "_doc","version": "8.13.0"},"agent": {"name": "host","type": "filebeat","version": "8.13.0","ephemeral_id": "e8367621-cd9a-4fc2-ad71-be60f93976d5","id": "0fef92e2-5af8-4706-ba2d-6f3cd1416f40"},"log": {"file": {"path": "/var/log/nova/nova-compute.log"},"offset": 1067},"message": "2023-05-10 23:21:52.593 7 INFO os_vif [-] Loaded VIF plugins: linux_bridge, noop, ovs","input": {"type": "log"},"service": "nova","ecs": {"version": "8.0.0"},"host": {"name": "host"},"component": "nova-compute","hostip": "1.1.1.1"
}

配置文件测试无误后,可以使用systemctl start filebeat后台运行。

logstash

安装

官网(https://www.elastic.co/cn/downloads/logstash)下载rpm包并安装。

rpm -ivh logstash-8.14.1-x86_64.rpm

配置

logstash的配置文件目录为/etc/logstash/conf.d,logstsh会读取目录下的所有配置文件,从而可以分别启用不同的端口、进行不同的处理和输出。但是logstsh只会简单的将所有配置拼凑起来,从而导致结果混乱,本文中通过type字段进行区分。
新建openstack.conf如下:

input {beats {port => 5000 type => "openstack"} 
}
filter {if [type] == "openstack" {mutate {add_field => [ "[resource_pool]", "KVM01" ]gsub => ["message", "\n", " "]}grok {match => ["message", "(?<log_time>^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) %{INT:pid} %{LOGLEVEL:log_level} %{GREEDYDATA:module} (?<request_id>\[(\s|\S)+\]) %{GREEDYDATA:log_message}"]}}
}
output {if [type] == "openstack" {stdout { codec => rubydebug }file {path => "/var/log/openstack-log.log"codec => line {format => "%{resource_pool} %{[host][name]} %{hostip} %{service} %{component} %{log_time} %{log_level} %{module} %{request_id} %{log_message}"}
}gzip => false}kafka {bootstrap_servers => "2.2.2.2:8333,2.2.2.3:8333,2.2.2.4:8333"security_protocol => "SASL_PLAINTEXT"sasl_mechanism => "SCRAM-SHA-512"sasl_jaas_config => "org.apache.kafka.common.security.scram.ScramLoginModule required username='xxxxxxx' password='xxxxxxxxxxx';"topic_id => "OPENSTACK-LOG"codec => json {charset => "UTF-8" }}elasticsearch {hosts => ["1.1.1.3:9200"]}}
}

其中部分配置解释如下:
(1)input
启动5000端口接受filebeat信息,并在接收的每一条消息中增加type字段
(2)filter
mutate
add_field:增加字段
gsub:将message字段中的换行符替换为空
grok
将message拆分:
匹配^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}的部分作为 log_time字段
数字作为pid字段
LOGLEVEL类型字符串作为log-level字段
GREEDYDATA类型字符串作为module}字段
匹配[(\s|\S)+]的部分作为request-id
剩余的GREEDYDATA类型作为log-message字段
(3)output
本文中演示了stdout、file、kafka、elasticsearch四种对接方法

启动

用以下命令进行测试:

/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/openstack.conf --config.test_and_exit

配置文件测试无误后,可以使用systemctl start logstash后台运行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 优化PyCharm:让IDE响应速度飞起来
  • 一键生成视频并批量上传视频抖音、bilibili、腾讯(已打包)
  • 【vulnhub】The Ether: Evil Science靶机
  • 浦语提示词工程实践
  • 从文本到图像:深度解析向量嵌入在机器学习中的应用
  • 面试经验|问题
  • Linux配置go程序为service后台开机自启动
  • Spring统一返回类型中关于String的问题
  • linux源码编译qt6.5问题解决
  • 基于Spring boot + Vue的灾难救援系统
  • Mojo值的生命周期(Life of a value)详解
  • Python酷库之旅-第三方库Pandas(062)
  • 【WPF开发】安装环境、新建工程
  • 一文读懂SEnet:如何让机器学习模型学会“重点观察”
  • 【Hadoop-驯化】一文教你轻松搞懂hadoop的基本原理
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Angular2开发踩坑系列-生产环境编译
  • DOM的那些事
  • ES6 学习笔记(一)let,const和解构赋值
  • exif信息对照
  • HTML-表单
  • js学习笔记
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • nginx 负载服务器优化
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redash本地开发环境搭建
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • win10下安装mysql5.7
  • Yeoman_Bower_Grunt
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 老板让我十分钟上手nx-admin
  • 浅谈Golang中select的用法
  • 如何实现 font-size 的响应式
  • 突破自己的技术思维
  • 一道面试题引发的“血案”
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • # 透过事物看本质的能力怎么培养?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)SpringCloud 整合Python
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (5)STL算法之复制
  • (52)只出现一次的数字III
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (六)软件测试分工
  • (十三)MipMap
  • (学习日记)2024.01.09
  • (转)c++ std::pair 与 std::make
  • (转)jdk与jre的区别
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)