通过Filebeat进行日志监控

news2024/9/23 15:19:03

对系统的日志监控,通用做法是使用ELK(Elasticsearch、Logstash、Kibana)进行监控和搜索日志,这里给出另一种方案:通过Filebeat接收日志到Kafka,监控平台接收Kafka,并通过WebSocket实时展示。

这种方案还可以增加Metricbeat监控机器指标。另外,监控平台可以选择其他方式展示日志,灵活性大。

这种方案适合对系统进行实时监控、以及对系统CPU、内存进行实时监控的场景。

结构图:

图片

流程图:

图片

数据收集

数据收集组件包括filebeat和metricbeat,寻找一个合适的本地文件夹进行部署,无需su权限。

其中,filebeat用于日志收集和结构化数据收集,metricbeat用于系统信息收集。

filebeat安装与配置

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-linux-x86_64.tar.gz

tar zxf filebeat-7.16.2-linux-x86_64.tar.gz

cd filebeat-7.16.2-linux-x86_64

vi filebeat.yml

(用实际日志文件名替换{FILE_PATH},如:/data/logs/systemx/abcd.log)

filebeat.inputs:

- type: filestream

 enabled: true

 paths:

   - FILE_PATH

output.kafka:

    enabled: true

    hosts: ["kfk-01.example.com:9092","kfk-02.example.com:9092","kfk-03.example.com:9092"]

    topic: system_x_journal

启动filebeat

nohup ./filebeat -c filebeat-[STRATEGY_ID]-jnl.yml -path.data=$PWD/data_[STRATEGY_ID]_jnl/ > filebeat-[STRATEGY_ID]-jnl.log 2>&1 &

Or

nohup ./filebeat -c filebeat-[STRATEGY_ID]-stt.yml -path.data=$PWD/data-[STRATEGY_ID]-stt/ > filebeat-[STRATEGY_ID]-stt.log 2>&1 &
 

filebeat文档在这里:Filebeat Reference [7.16] | Elastic

metricbeat安装与配置

安装

wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.16.2-linux-x86_64.tar.gz

tar zxf metricbeat-7.16.2-linux-x86_64.tar.gz

cd metricbeat-7.16.2-linux-x86_64

vi metricbeat.yml

配置

metricbeat.config.modules:

 path: ${path.config}/modules.d/*.yml

 reload.enabled: false

metricbeat.modules:

  - module: system

    metricsets: [core]

    core.metrics: [percentages, ticks]

processors:  

  - add_host_metadata:

      netinfo.enabled: true

output.kafka:

  enabled: true

  hosts: ["kfk-01.example.com:9092","kfk-02.example.com:9092","kfk-03.example.com:9092"]

  topic: system_x_sysinfo

启动

nohup ./metricbeat -c metricbeat.yml > metricbeat.log 2>&1 &

对于多个系统部署在一台服务器上的情况,往往会共用一份机器信息,则将配置文件的topic改为:system_x_ID_sysinfo。

注意:

1.metricbeat默认不带IP,需要在配置文件添加add_host_metadata

2.metricbeat默认不带CPU所有内核的负载,需要扩展module: system

3.传递内容及数据格式在这里:System fields | Metricbeat Reference [8.9] | Elastic

Kafka数据查看

作为中间调试步骤,可以登录到测试服务器,查看Kafka输出

cd /usr/local/kafka/bin/

sh kafka-console-consumer.sh --bootstrap-server kfk-01.example.com:9092,kfk-02.example.com:9092,kfk-03.example.com:9092 --topic YOUR_TOPIC

​​​​​​​Python(FastAPI)示例

在一个典型的Python FastAPI项目中,通过kafka consumer订阅对应策略的topic,持续消费kafka存储的日志数据,然后通过websocket服务,将日志推给连接的ws客户端。

KafkaConsumer

使用python的kafka包。

注意:安装kafka-python,不要kafka

使用 pip list | grep kafka查看是否有安装,如果已安装kafka,先卸载:

pip uninstall kafka

再安装

pip install kafka-python

FastAPI主程序示例

from web.monitors import loginfo, sysinfo

import asyncio


# 已声明 app = FastAPI()


@app.on_event("startup")

async def startup():

    loop = asyncio.get_running_loop()

    logging.info(loop)

    journal.set_config(config, loop)

    sysinfo.set_config(config)

    app.mount("/loginfo", loginfo.router_loginfo)

    app.mount("/sysinfo", sysinfo.router_sysinfo)

    logging.info("config journal and sysinfo")

附1:metricbeat机器信息返回字段

system_name:系统名称

app_cpu:系统应用占用的CPU(单位:百分比)

app_memory:系统应用占用的内存(单位:字节)

app_start_time:系统应用启动时间

app_pid:系统应用的进程ID

cpu_sys_usage:机器整体CPU系统使用(单位:百分比)

cpu_idle:机器整体CPU闲置(单位:百分比)

cpu_user_usage:机器整体CPU用户使用(单位:百分比)

cpu_cores:机器CPU内核数

cpu_cores_usage:列表,机器所有CPU核的负载(单位:百分比)

memory_usage:机器整体内存占用(单位:百分比)

memory_total:机器内存总和(单位:字节)

disk_usage:机器磁盘占用率(单位:百分比)

disk_total:机器磁盘空间总和(单位:字节)

host_name:主机名

os:主机操作系统

ip_addr:主机IP

附2:FastAPI+Websocket问题

基于解耦原则,日志的kafka消费、websocket服务模块需要放在单独的文件中,但是,通过app.include_router添加的ws路径不起作用,相关bugreport见这里。

目前的解决方案是:

在ws router服务模块中也声明app:

router_journal = FastAPI()

然后在主app文件中附加此router模块:

app.mount(router_journal)

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

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

相关文章

Java枚举类的构造函数

Java枚举类可以定义构造函数 Java枚举类可以定义构造函数,枚举常量后面括号中的参数值就是传递给构造函数的参数。 代码示例: package com.thb;public enum Constant {// 枚举常量后面括号中的参数值就是传递给构造函数的参数值REGISTER((byte)0x01),…

windows版docker部署springcloud项目

材料: 1.windows版docker环境(其他版教程可能道理一样但是比如文件后坠名上可能有差异) 2.运行好的数据库容器(实现教程) 3.所有jar包 实现: 最后整好的文件夹结构图(原工程文件机密&#xf…

教你一文教你使用自己的域名远程访问内网群晖NAS+6.X【内网穿透】

文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中,我们向大家演示了如何使用cpolar,创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

医学案例|ROC曲线之面积对比

一、案例介绍 为评价CT和CT增强对肝癌的诊断效果,共检查了32例患者,每例患者分别用两种方法检查,由医生盲态按4个等级诊断,最后经手术病理检查确诊其中有16例患有肝癌,评价CT个CT增强对肝癌是有有诊断效果并且试着比较…

cpolar内网穿透工具

文章目录 cpolar内网穿透工具 cpolar内网穿透工具 科学技术的发展日新月异,电子设备在人们的生活中已成为不可或缺的工具,甚至在很多情况下,各类型的电子设备已经成为工作的核心,虽然移动设备越来越小巧,功能也越来越…

Lab1 datalab

修改bits.c,使其满足btest的测试,代码规范./dlc bits.c 测试 make cleanmake btest./btest bitXor 思路 题目的意思是用按位&和取反~实现异或^操作。即x和y的同一位置如果都是1或者都是0,那么异或之后是0,否则是1 x & …

C#学习系列之System.Windows.Data Error: 40报错

C#学习系列之System.Windows.Data Error: 40报错 前言报错内容解决总结 前言 在用户界面使用上,代码运行没有问题,但是后台报错,仔细研究了报错内容,解决问题,所以记录一下。 报错内容 System.Windows.Data Error: 4…

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Python 进阶(二):操作字符串的常用方法

❤️ 博客主页:水滴技术 🌸 订阅专栏:Python 入门核心技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 文章目录 一、索引和切片二、字符串长度三、查找和替换四、大小写转换五、分割和连接六、去除空…

【深度解析】蓝牙室内定位方案优势介绍

万物互联时代,数据的价值进一步凸显,在海量数据中,位置数据成为万物互联产业中的基础坐标。室内空间结构越来越复杂,人们对位置的实时性和精确度要求不断提高,室内定位的需求也空前高涨。卫星信号对障碍物的穿透性较弱…

国内好用的企业级在线文档有哪些?

在当今数字化时代,企业级在线文档已经成为了现代办公环境中不可或缺的一部分。它不仅能够提高工作效率,还能够实现多人协同编辑,满足团队协作的需求。那么,在国内市场上,哪些企业级在线文档产品备受企业青睐呢&#xf…

【深度学习】WaveMix: A Resource-efficient Neural Network for Image Analysis 论文

论文:https://arxiv.org/abs/2205.14375 代码:https://github.com/pranavphoenix/WaveMix 文章目录 ABSTRACTIntroductionBackground and Related WorksWaveMix Architectural FrameworkOverall architectureWaveMix block Experiments and ResultsTasks…

计算机图形学十五菲涅尔方程

菲涅尔效应 菲涅尔效应在我们的日常生活中无处不在,下面来个例子三连: 我们去公园的池塘喂鲤鱼,当爆米花丢的比较近的时候,我们可以看见水底下成群的鲤鱼在抢吃的。但是当我们把爆米花丢的很远时,却看不见水底下那些如…

多线程面试题--使用场景

目录 线程池使用场景 多线程使用场景一( es数据批量导入) 多线程使用场景二(数据汇总) 多线程使用场景三(异步调用) 总结 如何控制某个方法允许并发访问线程的数量 总结​编辑 对ThreadLocal的理解 实现…

1200*A. Cheap Travel

#include<bits/stdc.h> using namespace std; typedef long long ll; int n,m,a,b,res; int main(){cin>>n>>m>>a>>b;if(a*m<b) resa*n;else{if(n%m0) resn/m*b;else{resn/m*b;resmin(n%m*a,b);}}cout<<res;return 0; }

「动态规划dp」

文章目录 0 概览1 步骤1.1 框架 2 刷题2.1 斐波那契数列2.1.1 题解2.1.2 Code2.1.3 结果 2.2 零钱兑换2.2.1 题解2.2.2 Code2.2.3 结果 0 概览 动态规划的题型&#xff0c;一定是要求解最值的&#xff0c;比如最短编辑距离&#xff0c;最长递增子序列&#xff0c;最长公共子序…

删除每行中的最大值

给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&…

Python - OpenCV识别条形码、二维码(已封装,拿来即用)

此代码可识别条形码和二维码&#xff0c;已封装好&#xff0c;拿来即用&#xff1a; import cv2 import pyzbar.pyzbar as pyzbar import numpy from PIL import Image, ImageDraw, ImageFontclass CodeScan():def __init__(self):super(CodeScan, self).__init__()def decode…

uniapp checkbox radio 样式修改

文章目录 通过查看代码&#xff0c;发现 before部分是设置样式的主要属性 我们要设置的话&#xff0c;就要设置checkbox::before的属性。 其中的content表示内容&#xff0c;比如内部的对勾 那么我们设置的时候&#xff0c;比如设置disabletrue的时候或者checkedtrue的时候&…

Redis(三)—— Redis基本的事务操作、Redis实现乐观锁

一、Redis基本的事务操作 首先声明&#xff1a; redis的单条命令是保证原子性的&#xff08;回想一下setnx k1 v1 k5 v5命令如果k1已经存在&#xff0c;那么k5也会设置失败&#xff09;但是redis的事务不保证原子性&#xff01;见下面“1.2 某条命令有错怎么办&#xff1f;”…