filebeat + logstash接入OpenStack日志

news/2025/11/16 17:21:53/文章来源:https://www.cnblogs.com/virtualzzf/p/19228553

背景

本文原发布于CSDN,现搬运至此,免得某天突然变成VIP文章,自己都看不了。
文中有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} (?<module>(\S)+) (?<request_id>\[(\s|\w|\d|-)+\]) %{GREEDYDATA:log_message}"]tag_on_failure => ["_grokparsefailure_openstack"]}if "_grokparsefailure_openstack" in [tags] {  drop {}}}
}
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字段
此外也可以用如下命令通过标准终端输入进行测试:

input {stdin {type => "openstack"codec => "plain"}
}

在终端中直接输入字符串,会默认作为message字段进行测试。
(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字段
匹配\S)+的部分作为module字段
匹配[(\s|\w|\d|-)+]的部分作为request-id
剩余的GREEDYDATA类型作为log-message字段
tag_on_failure
如果不匹配grok的规则,则在消息中增加"tags" => [0] "_grokparsefailure_openstack"并且丢弃
(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

配置文件测试无误,用如下命令前台启动:

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

检查无误后可以使用systemctl start logstash后台运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

pip安装或查看工具包时显示WARNING: Ignoring invalid distribution -XX的解决办法

pip安装或查看工具包时显示WARNING: Ignoring invalid distribution -XX的解决办法安装一些包出现的问题如下:原因: 原因是后面对应的目录文件夹下有不合法的文件存在,造成这个问题的原因很可能是原先下载包的过程中…

11 月 13 日

今日进度 (1)Commit 记录 •陈鉴祥: 完成 msg-svc 降级队列测试,启动 agent-svc 基础开发 •何绍斌: 开发 house-svc 缓存刷新接口,联调权限校验 •张廷智: 优化仪表盘接口调用,完成工单分配页开发 •郑权: 压…

详细介绍:用Flux.1-Krea[dev]打造动漫风格插画的提示词灵感与创作技巧

详细介绍:用Flux.1-Krea[dev]打造动漫风格插画的提示词灵感与创作技巧2025-11-16 17:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: aut…

11 月 14 日

今日进度 (1)Commit 记录 •陈鉴祥: 完成 agent-svc 工单分配逻辑,联调 msg-svc 通知 •何绍斌: 优化缓存批量刷新,完成 pay-svc 流程测试 •张廷智: 对接 msg-svc 消息,完成报修进度页开发 •郑权: 汇总 11 …

2025-11-13~15 hetao1733837的刷题记录

2025-11-13~15 hetao1733837的刷题记录2025-11-13~15 hetao1733837的刷题记录 11-13 [JOISC 2014]Water Bottle 原题链接1:[P14422 [JOISC 2014] 水桶 / Water Bottle]([P14422 JOISC 2014] 水桶 / Water Bottle - 洛…

20251114周五日记

20251114周五日记今日: 1.早上去上班看了看youtube上的教程,把工程伦理ppt做了。 2.中午和师兄去吃了减脂餐。吃完回去跑了会儿代码,回去取快递装床帘,上课看看,老师叫去开会。 3.晚上讨论完和师兄吃饭,吃完回去…

11 月 12 日

今日进度 (1)Commit 记录 •陈鉴祥: 完成 mcp-svc 锁超时释放,联调 msg-svc 与 order-svc •何绍斌: 解决 pay-svc 签名问题,开发 house-svc 房源编辑接口 •张廷智: 修复报修页相机问题,完成管理者端仪表盘布…

Lombok踩了无数次的坑

今天写demo使用Lombok注解。结果在编译时报错: java: 无法将类 com.mine.redisdemo.User 中的构造器 User 应用到给定类型; 需要:没有参数 找到: int,java.lang.String 原因:实际参数列表和形式参数列表长度不同然…

11 月 7 日

今日进度 (1)Commit 记录 •陈鉴祥: 完成 Redis 队列方案选型,编写 msg-svc 基础代码 •何绍斌: 添加 MongoDB 房源表区域索引,开发 house-svc 详情接口 •张廷智: 优化用户信息缓存逻辑,完成房东端房源管理入…

详细介绍:LeetCode //C - 893. Groups of Special-Equivalent Strings

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11 月 11 日

今日进度 (1)Commit 记录 •陈鉴祥: 优化 Redis 配置,完成 mcp-svc 分布式锁基础逻辑 •何绍斌: 解决 order-svc N+1 问题,编写 pay-svc 支付单逻辑 •张廷智: 添加账单页加载动画,完成报修页表单组件 •郑权:…

2025年国内烘干技术厂家排行榜:十大优质供应商深度评测

摘要 随着烘干技术行业的快速发展,2025年国内烘干设备市场呈现出智能化、节能化、安全化的明显趋势。本文基于市场调研和用户反馈,对市面上主流烘干技术厂家进行综合排名,为有采购需求的用户提供参考。文章包含详细…

2025年烘干技术源头厂家推荐排行榜前十名

摘要 烘干技术行业在2025年持续快速发展,尤其在节能环保和智能化方面取得显著进展。本文基于市场调研和用户反馈,整理了市面上烘干技术源头厂家的排行榜,旨在为采购决策提供参考。榜单综合考量了厂家实力、技术创新…

Docmost部署与应用实践

Docmost部署与应用实践Docmost 简介 Docmost是一款开源的协作维基和文档管理软件,它旨在为团队提供一个集中化、高效且易于使用的平台来创建、共享以及管理信息。作为 Confluence 和 Notion 的开源替代品,Docmost …

[论文笔记] Lifting On-Demand Analysis to Higher-Order Languages

Introduction 很多静态分析工具在进行按需静态分析之前都假设存在一个调用图。但是这种假设不够好,对于 JavaScript 这种具有多种动态特性的语言,调用图分析和数据流分析之间的相互依赖关系要更强。如果忽略这种相互…

2025年烘干机厂家排行榜前十强推荐:行业精选与选择指南

摘要 随着农业机械和食品加工行业的快速发展,烘干机设备在2025年迎来技术创新高峰,注重安全、节能和智能化。本文基于行业数据和用户反馈,整理出2025年烘干机厂家排行榜前十强,为采购决策提供参考。榜单结合推荐指…

Java 可变参数机制

基本语法和使用 1. 基本语法public class VarargsExample {// 可变参数声明:类型... 参数名public static int sum(int... numbers) {int total = 0;for (int num : numbers) {total += num;}return total;}// 可变参…

11 月 3 日

项目核心信息链接信息类型 链接地址 备注说明 团队博客(阶段计划) https://www.cnblogs.com/zq-zgcai/p/19191312 含 Alpha 阶段目标、分工及风险管控 Github 代码仓库 https://github.com/hotfixMyLife/House-Renta…

002 vue3-admin项目的目录及文件说明之src目录及其子目录、子文件

整体目录结构src/ ├── api/ # API 接口相关 ├── assets/ # 静态资源 ├── components/ # 通用组件 ├── composables/ # 组合式函数 ├── constants/ …