【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统

news2025/1/20 12:07:47

在将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: true

services:
  loki:
    image: grafana/loki:2.8.0
    ports:
      - "3100:3100"
    volumes:
      - loki-config:/etc/loki
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.8.0
    volumes:
      - promtail-config:/etc/promtail
      - /var/log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    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-panel
    entrypoint:
      - sh
      - -euc
      - |
        mkdir -p /etc/grafana/provisioning/datasources
        cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
        apiVersion: 1
        datasources:
        - name: Loki
          type: loki
          access: proxy
          orgId: 1
          url: http://loki:3100
          basicAuth: false
          isDefault: true
          version: 1
          editable: false
        EOF
        /run.sh
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
    networks:
      - loki

  # Influx DB
  influxdb:
        image: influxdb:2.0.7
        restart: always
        volumes:
            - /docker/nfcollector/vendors/influxdb:/var/lib/influxdb2
        ports:
            - "8086:8086"
              # - "8082:8082"
              #- "8089:8089"
        networks:
            - loki

  nfcolector:
        image: javadmohebbi/gonfcollector
        restart: always
        # network_mode: host
        ports:
            - "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/vendors
        networks:
            - loki
        environment:
           - 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.socket

volumes:
  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.whnw.com.cn/news/1707769.html

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

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

相关文章

云服务 Ubuntu 20.04 版本 使用 Nginx 配置SSL证书和nginx从HTTP跳转到HTTPS

1.云服务申请免费的SSL证书 2.从云服务SSL证书下载到本地解压上传到服务器 3.配置Nginx下的 nginx.cof 文件 4.开放安全组&#xff0c;内部与外部 5.测试配置与跳转是否成功 1.云服务申请免费的SSL证书 1.1.登录云平台找到SSL证书 注意&#xff1a;博主这里是腾讯云&#x…

程序员如何利用公网远程访问查询本地硬盘【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…

OJ练习第151题——克隆图

克隆图 力扣链接&#xff1a;133. 克隆图 题目描述 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 示例 分析 对于一张图而言&#xff0c;它的深拷贝即构建一张与原图结构&#xff0c;值均一样的图&#xff0c;但是…

光伏发电系统的并网接入点选择及接入方案

1.并网方式及接入点选择 (1))并网点与接入点定义 1)并网点。对于有升压站的分布式电源&#xff0c;并网点为分布式电源升压站中压侧母线或节点&#xff0c;对于无升压站的分布式电源&#xff0c;并网点为分布式电源的输出汇总点。图1中所示A1、B1点分别为分布式电源A、B的并网…

工业视觉相机镜头选型方法

一、相机选型 1、首先&#xff0c;根据检测需求确定选用黑白/彩色、面阵/线阵相机&#xff0c;接口类型一般选择GigE 2、确定检测精度要求&#xff08;最小特征尺寸mm&#xff09;、视野范围&#xff0c;一个测量精度对应几个像素数&#xff08;一般取3-5&#xff09; 3、计…

【山河送书第七期】:《强化学习:原理与Python实战》揭秘大模型核心技术RLHF!

《强化学习&#xff1a;原理与Python实战》揭秘大模型核心技术RLHF&#xff01; 一图书简介二RLHF是什么&#xff1f;三RLHF适用于哪些任务&#xff1f;四RLHF和其他构造奖励模型的方法相比有何优劣&#xff1f;五什么样的人类反馈才是好反馈&#xff1f;六如何减小人类反馈带来…

Matplotlib数据可视化(四)

1.在绘图中显示公式 在Matplotlib中可以使用LaTex的命令来编辑公式&#xff0c;只需要在字符串前面加一个r即可。 示例1&#xff1a; import numpy as np import matplotlib.pyplot as plt plt.xlim([1,4]) plt.ylim([1,3]) plt.text(2,2,r$ \alpha \beta \pi \lambda \omeg…

新榜 | CityWalk本地生活商业价值洞察报告

如果说现在有人问&#xff0c;最新的网络热词是什么? “CityWalk”&#xff0c;这可能是大多数人的答案。 近段时间&#xff0c;“CityWalk”刷屏了各种社交媒体&#xff0c;给网友们带来了一场“城市漫步”之旅。 脱离群体狂欢&#xff0c;这个在社交媒体引发热议的词汇背后又…

【leetcode】232. 用栈实现队列

1.使用两个栈结构构建队列 我们需要自定义栈及其相关操作 栈结构遵循后入先出的原则&#xff0c;队列结构遵循先入先出的原则 构建具有两个栈结构的队列&#xff0c;栈pushST用于数据的插入&#xff0c;栈popST用于数据的删除 为栈结构动态开辟空间并初始化栈结构 //定义一个具…

object获取的两种方式/Object.keys使用/解构赋值

object获取的两种方式&#xff1a; data() {return {abj: {aa: {A: 1}}}},created() {console.log(this.abj.aa) //第一种console.log(this.abj["aa"]) //第二种}, Object.keys使用/解构赋值&#xff1a; return {footList: [],abj: {aa: {A: 12,AA:22},bb: {…

macOS系统安装python3

官网下载 官网&#xff1a;https://www.python.org/ 选择最新版本下载 双击安装包 点击继续 点击继续 点击同意 点击安装 终端执行 python3 --version

九、Linux下,如何在命令行进入文本编辑页面?

1、文本编辑基础 说到文本编辑页面&#xff0c;那就必须提到vi和vim&#xff0c;两者都是Linux系统中&#xff0c;常用的文本编辑器 2、三种工作模式 3、使用方法 &#xff08;1&#xff09;在进入Linux系统&#xff0c;在输入vim text.txt之后&#xff0c;会进入文本编辑中&…

【JS】for 与 forEach 分别如何跳出循环

for 循环 在 for 循环中&#xff0c;退出循环的两种方式&#xff1a; break; 退出整个循环continue; 退出当次循环 let array [1, 2, 3, 4, 5, 6, 7, 8, 9]; for (let i 0; i < array.length; i) {if (array[i] 6) {// break; // 退出整改循环&#xff0c;continue; /…

高并发内存池(centralcache)[2]

Central cache threadcache是每个线程独享&#xff0c;而centralcache是多线程共享&#xff0c;需要加锁&#xff08;桶锁&#xff09;一个桶一个锁 解决外碎片问题&#xff1a;内碎片&#xff1a;申请大小超过实际大小&#xff1b;外碎片&#xff1a;空间碎片不连续&#x…

能耗分析在医院节能中的管理

摘要&#xff1a;医院作为特殊的公共建筑&#xff0c;能耗较大且逐年攀升&#xff0c;具有较大的节能潜力。结合天津市某医院的用能概况、智慧管理平台的建设和使用&#xff0c;对大量能耗数据进行了研究和分析&#xff0c;通过将能源管理系统、数据分析与节能工作相结合&#…

在Visual Studio中使用 //TODO注释

在软件开发过程中&#xff0c;注释是非常重要的&#xff0c;它们可以帮助开发者理解代码的功能和逻辑。​有时候我们只需要标记出一些临时性的、需要后续处理的代码片段。这时候&#xff0c;我们可以使用一种特殊的注释&#xff1a;//TODO注释。 //TODO注释是一种轻量级的注释…

【项目实践】基于LSTM的一维数据扩展与预测

基于LSTM的一维数据拟合扩展 一、引(fei)言(hua) 我在做Sri Lanka生态系统服务价值计算时&#xff0c;中间遇到了一点小问题。从世界粮农组织(FAO)上获得Sri Lanka主要农作物产量和价格数据时&#xff0c;其中的主要作物Sorghum仅有2001-2006年的数据&#xff0c;而Millet只有…

2011年下半年 软件设计师 上午试卷2

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

新宝马M5谍照曝光,侵略感十足,将与奥迪、梅赛德斯-AMG正面竞争

报道称&#xff0c;宝马即将推出全新一代M5&#xff0c;该车的谍照最近再次曝光。早先&#xff0c;宝马 M5 Touring 旅行汽车的赛道测试图片已经在网络上流传开来&#xff0c;预计该车将与奥迪的RS6 Avant和梅赛德斯-AMG E63 Estate展开正面竞争。 从最新曝光的照片来看&#x…