【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。

  1. Loki:Loki是Grafana Loki系统的核心,它是一个分布式日志存储系统。Loki与传统的日志存储不同,它使用流水线处理和索引数据,以便在查询时可以快速访问所需的日志数据。Loki使用基于标签的存储模型,并支持水平扩展,使您能够处理大量的日志数据。

  2. 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
  1. module(load="imudp"): 加载imudp模块,它提供了UDP协议的syslog接收功能。UDP是一种无连接的协议,用于接收远程主机发送的syslog消息。

  2. input(type="imudp" port="514"): 配置UDP syslog的输入。它指定rsyslogd监听本地端口514,以接收UDP syslog消息。

  3. module(load="imtcp"): 加载imtcp模块,它提供了TCP协议的syslog接收功能。与UDP不同,TCP是一种面向连接的协议,可以提供可靠的消息传递。

  4. input(type="imtcp" port="514"): 配置TCP syslog的输入。它指定rsyslogd监听本地端口514,以接收TCP syslog消息。

  5. module(load="imklog" permitnonkernelfacility="on"): 加载imklog模块,它提供了内核日志支持,并允许接收非内核klog消息。klog是内核日志的一种特殊设备。

  6. $template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *: 定义了一个名为RemoteLogs的日志模板。它指定了日志的输出位置和格式,这里的意思是将远程主机的日志以IP地址为文件名保存在/var/log/network/目录下。

  7. *.* ?RemoteLogs: 这是一个日志规则,它指定将所有类型的日志消息发送到RemoteLogs模板中定义的输出位置。

  8. & ~: 这是另一个日志规则,它指定丢弃所有匹配的日志消息。这里的作用是防止消息被重复处理。
    这些配置行的作用是配置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
在这里插入图片描述

后续工作

  1. 将网络设备的日志及netflow转存到对应的服务中。
  2. 在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

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

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

相关文章

【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…

14-redis

一 Redis概述 1 为什么要用NoSQL 单机Mysql的美好年代 在90年代&#xff0c;一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以 轻松应付。在那个时候&#xff0c;更多的都是静态网页&#xff0c;动态交互类型的网站不多。 遇到问题&#xff1a; 随着用户数的增长…

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后&#xff0c;会得到一个名为 mingw-get-setup.exe 的安装包&#xff0c;双击打开它&#xff0c;可以看到如下的对话框&#xff1a; 1.3、直接点击“Install”&#xff0c;进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…

【学习FreeRTOS】第17章——FreeRTOS任务通知

1.任务通知的简介 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需另外创建一个结构体&#xff0c;通过中间的结构体进行间接通信&#xff01; 使用任务通知时&#xff0c…

【C++】详解声明和定义

2023年8月28日&#xff0c;周一下午 研究了一个下午才彻底弄明白... 写到晚上才写完这篇博客。 目录 声明和定义的根本区别结构体的声明和定义声明结构体 定义结构体类的声明和定义函数的定义和声明声明函数 定义函数变量声明和定义声明变量定义变量 声明和定义的根本区别 …

RabbitMQ笔记-RabbitMQ基本术语

RabbitMQ基本术语 相关概念; 生产者&#xff08;Producer&#xff09;&#xff1a;投递消息。消息&#xff1a;消息体&#xff08;payload&#xff09;标签&#xff08;label&#xff09;&#xff1b;生产者把消息交给rabbitmq&#xff0c;rabbitmq会根据标签把消息发给感兴趣…

15-模型 - 一对多 多对多

一对多&#xff1a; 1. 在多的表里定义外键 db.ForeignKey(主键) 2. 增加字段 db.relationship 建立联系 ("关联表类名","反向引用名") from ext import db# 一 class User(db.Model):id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)us…

LeetCode——回溯篇(一)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 39. 组合总和 40. 组合总和 II 77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的…

4G智慧电力物联网:建设高效智能,引领电力行业革新!

随着4G与物联网技术的快速发展为电力行业提供了更高效、可靠、智能化的解决方案。本文中智联物联将为大家分享智慧电力系统中的一些关键的物联网技术和通讯设备&#xff0c;如工业4G路由器、分布式发电站、数据采集传输、远程监控管理以及变电站监测。 光伏发电站是电力行业中重…

万级数据优化EasyExcel+mybatis流式查询导出封装

文章目录 前言.千万级数据优化一. 直接上流式查询封装工具代码二. 传统分页导出查询三. 流式查询概念游标查询 前言.千万级数据优化 我们不妨先给大家讲一个概念&#xff0c;利用此概念我们正好给大家介绍一个数据库优化的小技巧&#xff1a; 需求如下&#xff1a;将一个地市表…

在kaggle中用GPU使用CGAN生成指定mnist手写数字

文章目录 1项目介绍2参考文章3代码的实现过程及对代码的详细解析独热编码定义生成器定义判别器打印我们的引导信息模型训练迭代过程中生成的图片损失函数的变化 4总结5 模型相关的文件 1项目介绍 在GAN的基础上进行有条件的引导生成图片cgan 2参考文章 GAN实战之Pytorch 使用…

Django基础6——数据模型关系

文章目录 一、基本了解二、一对一关系三、一对多关系3.1 增删改查3.2 案例&#xff1a;应用详情页3.2 案例&#xff1a;新建应用页 四、多对多关系4.1 增删改查4.2 案例&#xff1a;应用详情页4.3 案例&#xff1a;部署应用页 一、基本了解 常见数据模型关系&#xff1a; 一对一…

好用的网页制作工具就是这6个,快点来看!

对于网页设计师来说&#xff0c;好用的网页设计工具是非常重要的&#xff0c;今天本文收集了6个好用的网页设计工具供设计师自由挑选使用。在这6个好用的网页设计工具的帮助下&#xff0c;设计师将获得更高的工作效率和更精致的网页设计效果&#xff0c;接下来&#xff0c;就一…

【Java alibabahutool】JSON、Map、实体对象间的相互转换

首先要知道三者的互转关系&#xff0c;可以先将JSON理解成是String类型。这篇博文主要是记录阿里巴巴的JSONObject的两个方法。toJSONString()以及parseObject()方法。顺便巩固Map与实体对象的转换技巧。 引入依赖 <!-- 阿里巴巴 JSON转换 以下二选一即可 没有去细研究两者…

Centos 7.6 安装mongodb

以下是在CentOS 7.6上安装MongoDB的步骤&#xff1a; 打开终端并以root用户身份登录系统。 创建一个新的MongoDB存储库文件 /etc/yum.repos.d/mongodb-org-4.4.repo 并编辑它。 sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo在编辑器中&#xff0c;添加下面的内容到文件中并…

什么是字体图标(Icon Font)?如何在网页中使用字体图标?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字体图标&#xff08;Icon Font&#xff09;⭐ 如何在网页中使用字体图标⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

基于MATLAB/Simulink的三相并网逆变器dq阻抗建模及扫频仿真

目录 整体系统介绍理论模型MATLAB实现 基于Simulink的阻抗扫频仿真整体思路注意事项流程框图 其他 本文主要介绍三相并网逆变器dq阻抗建模的相关知识&#xff0c;和大家分享一下怎么使用MATLAB/Simulink来进行理论模型的搭建以及如何通过扫频获取阻抗模型&#xff0c;一方面是给…

Netty简易聊天室

文章目录 本文目的参考说明环境说明maven依赖日志配置单元测试 功能介绍开发步骤 本文目的 通过一个简易的聊天室案例&#xff0c;讲述Netty的基本使用。同时分享案例代码。项目中用到了log4j2&#xff0c;junit5&#xff0c;同时分享这些基础组件的使用。项目中用到了awt&…

小程序开发之登录授权

小程序开发登录授权流程 看懂这张图登录授权就没问题了&#xff08;哈哈哈哈哈&#xff09; 说明&#xff1a; 调用 wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。 调用 auth.code2Session 接口&#xff0c;换取 用户唯一标识 OpenID 和 会话密钥 sess…