【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统
在将Graylog部署到生产环境时,我们遇到了一些问题,其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that!
】。为了寻找一个更可行的解决方案,我们决定将注意力转向另一个强大的日志管理系统:Grafana Loki。同时,我们还使用了nfcolector来收集网络设备的Netflow信息并保存在InfluxDB中。最终,我们通过Grafana将所有这些收集到的日志和数据进行集中展示,为网络设备的日常管理提供了更加美观和直观的界面。这样的架构和工具组合使得我们在网络设备管理和监控方面取得了更好的效果。
架构
Grafana Loki
Grafana Loki是一个开源日志聚合系统。它允许您收集、存储、浏览和查询大规模分布式日志数据。与传统的日志管理系统相比,Grafana Loki的设计理念更加轻量级和高效。
使用Grafana Loki,您可以通过两个核心组件实现日志管理:Loki和Promtail。
-
Loki:Loki是Grafana Loki系统的核心,它是一个分布式日志存储系统。Loki与传统的日志存储不同,它使用流水线处理和索引数据,以便在查询时可以快速访问所需的日志数据。Loki使用基于标签的存储模型,并支持水平扩展,使您能够处理大量的日志数据。
-
Promtail:Promtail是一个日志收集代理,它负责从各个源(如文件、系统日志、容器日志等)收集日志数据,并将其发送到Loki进行存储。Promtail可以与各种各样的日志源进行集成,并支持标准的日志格式,如JSON、GELF等。
Go Netflow Collector(goNfCollector)
goNfCollector帮助您从网络设备中收集Netflow数据。它将所需的所有信息存储在InfluxDB中,以便进行进一步的分析,并使用Grafana进行可视化。
Grafana
Grafana是一个流行的开源数据可视化平台。它提供了强大的数据可视化功能和丰富的插件生态系统,使用户能够创建仪表盘、报表和警报,并对数据进行深入的分析。Grafana与Grafana Loki,InfluxDB等可以结合使用,通过数据源,您可以在Grafana中轻松地创建日志查询和仪表盘,将日志数据与监控数据进行统一展示和分析。
部署
环境说明
- Ubuntu 22.04
- Docker version 24.0.5
- Docker Compose version v2.20.2
1. rsyslog的部署
默认情况下,Rsyslog安装在Ubuntu服务器上。如果没有安装,您可以通过运行以下命令来安装它:
apt install rsyslog -y
修改配置文件 /etc/rsyslog.conf
vim /etc/rsyslog.conf
以下是最终结果及大概的解释:
# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf#################
#### MODULES ####
#################module(load="imuxsock") # provides support for local system logging
module(load="immark") # provides --MARK-- message capability# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")$template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *
*.* ?RemoteLogs
& ~###########################
#### GLOBAL DIRECTIVES ####
############################
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat# Filter duplicated messages
$RepeatedMsgReduction on#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
-
module(load="imudp")
: 加载imudp
模块,它提供了UDP协议的syslog接收功能。UDP是一种无连接的协议,用于接收远程主机发送的syslog消息。 -
input(type="imudp" port="514")
: 配置UDP syslog的输入。它指定rsyslogd监听本地端口514,以接收UDP syslog消息。 -
module(load="imtcp")
: 加载imtcp
模块,它提供了TCP协议的syslog接收功能。与UDP不同,TCP是一种面向连接的协议,可以提供可靠的消息传递。 -
input(type="imtcp" port="514")
: 配置TCP syslog的输入。它指定rsyslogd监听本地端口514,以接收TCP syslog消息。 -
module(load="imklog" permitnonkernelfacility="on")
: 加载imklog
模块,它提供了内核日志支持,并允许接收非内核klog消息。klog是内核日志的一种特殊设备。 -
$template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *
: 定义了一个名为RemoteLogs的日志模板。它指定了日志的输出位置和格式,这里的意思是将远程主机的日志以IP地址为文件名保存在/var/log/network/
目录下。 -
*.* ?RemoteLogs
: 这是一个日志规则,它指定将所有类型的日志消息发送到RemoteLogs模板中定义的输出位置。 -
& ~
: 这是另一个日志规则,它指定丢弃所有匹配的日志消息。这里的作用是防止消息被重复处理。
这些配置行的作用是配置rsyslogd以接收不同来源的syslog消息,并将它们保存到相应的日志文件中。
保存完配置后,重启rsyslog服务,并查看状态
systemctl restart rsyslog
systemctl status rsyslog
netstat -nltup | grep 514
2. goNfCollector部署
环境要求:需要安装docker、docker-compose和wget工具。安装过程中需要魔法
,否则可能会失败
下载最新版本:通过以下命令将最新版本的脚本文件下载到本地:
wget -O latest.sh https://raw.githubusercontent.com/javadmohebbi/goNfCollector/main/dockerize/build-up-from-github.sh
使脚本文件可执行:通过以下命令给下载的脚本文件赋予执行权限:
chmod +x latest.sh
运行下载的脚本:通过以下命令运行下载的脚本文件:
./latest.sh
在执行过程中,可能会要求输入用户密码。
在执行完成后,脚本会告诉你如何运行容器。但我们不需要通过这个来运行容器。
3. Grafana Loki部署
因为是使用docker环境来部署的,所以就相对就方便很多,仅需要编辑下docker compose文件就可以了,并且将上一步中的influxdb,nfcolector合并到一起并修改下network设置。
version: "3"networks:loki:external: trueservices:loki:image: grafana/loki:2.8.0ports:- "3100:3100"volumes:- loki-config:/etc/lokicommand: -config.file=/etc/loki/local-config.yamlnetworks:- lokipromtail:image: grafana/promtail:2.8.0volumes:- promtail-config:/etc/promtail- /var/log:/var/logcommand: -config.file=/etc/promtail/config.ymlnetworks:- lokigrafana:environment:- GF_PATHS_PROVISIONING=/etc/grafana/provisioning- GF_AUTH_ANONYMOUS_ENABLED=true- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,agenty-flowcharting-panelentrypoint:- sh- -euc- |mkdir -p /etc/grafana/provisioning/datasourcescat <<EOF > /etc/grafana/provisioning/datasources/ds.yamlapiVersion: 1datasources:- name: Lokitype: lokiaccess: proxyorgId: 1url: http://loki:3100basicAuth: falseisDefault: trueversion: 1editable: falseEOF/run.shimage: grafana/grafana:latestports:- "3000:3000"volumes:- grafana-storage:/var/lib/grafananetworks:- loki# Influx DBinfluxdb:image: influxdb:2.0.7restart: alwaysvolumes:- /docker/nfcollector/vendors/influxdb:/var/lib/influxdb2ports:- "8086:8086"# - "8082:8082"#- "8089:8089"networks:- lokinfcolector:image: javadmohebbi/gonfcollectorrestart: always# network_mode: hostports:- "6859:6859/udp"volumes:- /docker/nfcollector/bin:/opt/nfcollector/bin- /docker/nfcollector/etc:/opt/nfcollector/etc- /docker/nfcollector/var:/opt/nfcollector/var- /docker/nfcollector/vendors:/opt/nfcollector/vendorsnetworks:- lokienvironment:- NFC_DEBUG=true# total number of cpu nfcollector could use- NFC_CPU_NUM=0- NFC_LISTEN_ADDRESS=0.0.0.0- NFC_LISTEN_PORT=6859- NFC_INFLUXDB_HOST=influxdb- NFC_INFLUXDB_PORT=8086- NFC_INFLUXDB_TOKEN=5vqt0q0b4g_lZwNgp7-8GgPq5Nxf3YY37xbVZP_ypeK_G3dwdNlTrAkcKN_Q6QzbmG-Th96lT_65Kp0j2UD1HA==- NFC_INFLUXDB_BUCKET=nfCollector- NFC_INFLUXDB_ORG=OPENINTELLIGENCE- NFC_IP_REPTATION_IPSUM=/opt/nfcollector/vendors/ipsum/ipsum.txt- NFC_IP2L_ASN=/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-ASN.IPV6.CSV/IP2LOCATION-LITE-ASN.IPV6.CSV- NFC_IP2L_IP=/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-DB11.IPV6.BIN/IP2LOCATION-LITE-DB11.IPV6.BIN- NFC_IP2L_PROXY=/opt/nfcollector/vendors/ip2location/db/IP2PROXY-LITE-PX10.IPV6.CSV/IP2PROXY-LITE-PX10.IPV6.CSV- NFC_IP2L_LOCAL=/opt/nfcollector/vendors/ip2location/local-db/local.csv- NFC_SOCK_PATH=/opt/nfcollector/var/socket/fw.socketvolumes:loki-config:promtail-config:grafana-storage:
编辑完之后使用命令行检查下yaml设置并启动docker
docker compose config #命令用于验证和查看`docker-compose.yaml`文件的配置。
docker compose up -d #命令用于在后台启动并运行基于`docker-compose.yaml`文件定义的容器组。其中,`-d`标志表示以后台(守护)模式运行容器。
访问Grafana
通过访问http://hostip:3000来访问Grafana平台,初始密码为admin/admin
后续工作
- 将网络设备的日志及netflow转存到对应的服务中。
- 在Grafana上对数据进行筛选及展示。
Refernce
[1] https://github.com/javadmohebbi/goNfCollector
[2] https://grafana.com/docs/loki/latest/installation/docker/
[3] https://github.com/grafana/loki
[4] https://github.com/grafana/grafana
相关文章:

【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统
在将Graylog部署到生产环境时,我们遇到了一些问题,其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! 】。…...

[JavaWeb]【八】web后端开发-Mybatis
目录 一 介绍 二 Mybatis的入门 2.1 快速入门 2.1.1 准备SpringBoot工程 2.1.2 创建数据库mybatis以及对应库表user 2.1.3 创建User实体类 2.1.4 配置application.properties数据库连接信息 2.1.5 编写sql语句(注解方式) 2.1.6 测试运行 2.1.7 配…...

Flink源码之Checkpoint执行流程
Checkpoint完整流程如上图所示: JobMaster的CheckpointCoordinator向所有SourceTask发送RPC触发一次CheckPointSourceTask向下游广播CheckpointBarrierSouceTask完成状态快照后向JobMaster发送快照结果非SouceTask在Barrier对齐后完成状态快照向JobMaster发送快照结…...

【工具使用】Git的使用
dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪,把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态:出现了一些修改,但是还没有提交 对于Java来说,.cl…...

无涯教程-PHP Installation on Windows NT/2000/XP with IIS函数
在Windows Server上运行IIS的PHP的安装比在Unix上简单得多,因为它涉及的是预编译的二进制文件而不是源代码。 如果您打算在Windows上安装PHP,那么这是先决条件列表- 运行中的PHP支持的Web服务器。一个正确安装的PHP支持的数据库,如MySQL或Oracle等。(如果您打算使用的话) PHP…...

EureKa快速入门
EureKa快速入门 远程调用的问题 多个服务有多个端口,这样的话服务有多个,硬编码不太适合 eureKa的作用 将service的所有服务的端口全部记录下来 想要的话 直接从注册中心查询对于所有服务 每隔一段时间需要想eureKa发送请求 保证服务还存活 动手实践 …...
Sectigo EV代码签名申请步骤
一、EV代码签名申请前提 1、单位成立时间不低于:3个月 2、单位工商及企查查可查 3、单位经营正常 4、注册地址真实存在,禁止使用集中注册地址 5、企查查登记电话和邮箱,确定查询结果的电话可以接听、邮箱可以接收邮件,如果信…...

生信学院|08月25日《SOLIDWORKS PDM帮助企业对设计数据版本的管理应用》
课程主题:SOLIDWORKS PDM帮助企业对设计数据版本的管理应用 课程时间:2023年08月25日 14:00-14:30 主讲人:车立洋 生信科技 PDM专家 1、图纸&文档的版本管理对于企业的重要性 2、SolidWorks PDM对图纸&文档版本的管理 3、SolidW…...

vue页面转pdf后分页时文字被横向割裂
效果 预期效果 //避免分页被截断async outPutPdfFn (id, title) {const _t this;const A4_WIDTH 592.28;const A4_HEIGHT 841.89;// dom的id。let target document.getElementById(pdf);let pageHeight target.scrollWidth / A4_WIDTH * A4_HEIGHT;// 获取分割dom…...

数据结构——队列(C语言)
需求:无 本篇文章将解决一下几个问题: 队列是什么?如何实现一个队列?什么场景下会用队列? 队列的概念: 队列:一种只允许一端进行插入数据操作,在另一端进行删除操作的特殊线性表。…...

WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集
野火 ATGM332D简介 高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源!共六款软件,学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/for…...

【面试题】前端面试复习6---性能优化
前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 性能优化 一、性能指标 要在 Chrome 中查看性能指标,可以按照以下步骤操作: 打开 Chrome 浏览器,并访问你想要测试…...

隧道HTTP具备的条件
作为一名专业的爬虫代理供应商,我们都知道使用代理是保证爬虫的高效性和稳定性的重要手段之一。而隧道代理则是近年来备受推崇的一种代理形式,它通过将请求通过隧道传输,可以有效地隐藏爬虫的真实IP地址,提高爬虫的反爬能力。 在…...

部署FTP服务(二)
目录 2.访问FTP服务 1.使用ftp命令行工具 2.使用浏览器 3.使用FileZilla Client 3.Serv-U 1.定义新域 2.创建用户 4. windowsserver搭建ftp服务器 一、FTP工具 二、Windows资源管理器 三、IE浏览器访问 2.访问FTP服务 下面在一台装有Windows10操作系统的计算机中&#…...
缓存的变更(JVM本地缓存->Redis分布式缓存)
在一次需求修改中,下游的服务附加提出了,针对某个业务数据缓存的生效时间的要求 原JVM设计方案: 采用jvm本地缓存机制,定时任务30秒刷新一次 现在redis方案: 因为很多地方使用了这个业务数据缓存,使用方…...

springMVC Unix 文件参数变更漏洞修复
错误信息如下: 解决方案: 原因:未对用户输入正确执行危险字符清理 未检查用户输入中是否包含“…”(两个点)字符串,比如 url 为 /login?action…/webapps/RTJEKSWTN26635&typerandomCode cookie为Coo…...
【LeetCode】494.目标和
题目 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ,在 1 之前添加 - &#x…...

KaiwuDB 荣获哈佛商业评论 2023“高能韧性团队奖”
8月18日,《哈佛商业评论》中文版携手 FESCO 成功举办“第九届人才经济论坛”暨“2022-2023 高能团队奖颁奖典礼”。论坛秉承前沿的全球视野及权威的管理理念,发掘并展示本土企业组织管理的最佳实践,并重磅揭晓第二届“高能团队奖”评选结果。…...

删除ubuntu开始菜单中的图标
背景 本来是很好看干净的界面 更新谷歌浏览器后出现了Gmail,幻灯片,谷歌硬盘等跟谷歌相关的乱七八糟东西搞得界面就很丑 解决问题 删掉那个图标 输入命令 sudo nautilus /usr/share/applicationssudo nautilus ~/.local/share/applications可以…...
信息系统项目管理基础知识学习笔记 - IT 治理基础 - IT治理的驱动因素
信息系统项目管理基础知识学习笔记 - IT 治理基础 - IT治理的驱动因素 IT治理的驱动因素组织的IT战略驱动组织开展高质量IT治理因素IT治理的内涵IT 治理体系信息系统项目管理基础知识学习笔记 - IT 治理基础 - IT治理的驱动因素 IT治理的驱动因素 组织信息系统建设和运行需要…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...