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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 绘画Stable Diffusion 研究(十一)sd图生图功能详解-美女换装

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 为了让大家更直观的了解图生图功能&#xff0c;明白图生图功能到底是干嘛的&#xff0c;能做什么事情&#xff1f;今天我们继续介绍图生图的实用案例-美女换装的制作。 对于…

第6天----【位运算进阶之-----位与()】七夕特别版

今天我们来学习C语言的位与。 ❤️C语言的位与&#xff08;&&#xff09;操作是一种按位运算符&#xff0c;用于对两个操作数的每个对应位执行逻辑与操作。它的操作规则如下&#xff1a; 如果两个操作数的对应位都为1&#xff0c;则结果的对应位也为1。&#xff08;全1才…

pdf怎么转换成图片?用这几种简单方法搞定

pdf怎么转换成图片&#xff1f;PDF作为一种通用的文档格式&#xff0c;广泛应用于各个领域。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换成图片格式&#xff0c;以便更方便地在网页、社交媒体或演示中使用。下面就给大家介绍三种简单而高效的方法来实现…

基于springboot灾区物资管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【Leetcode】移动零

移动零 题目描述算法描述编程代码 链接: 移动零 题目描述 算法描述 编程代码 class Solution { public:void moveZeroes(vector<int>& nums) {//题目要求不可以复制数组&#xff0c;开辟额外空间int dest -1,curr 0;for(;curr < nums.size();curr){if(nums[cu…

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…

jenkins 是什么?

一、jenkins 是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&#…

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

redis7高级篇3 数据量亿级别的统计分析(hyperloglog,bitmap,geo)

一 亿级别统计分类 1.1 统计分类 1.聚合统计&#xff1a;统计多个集合聚合的结果&#xff0c;也就是多个集合之间交并差的统计。 2.排序统计&#xff1a;在需要展示最新列表&#xff0c;排行榜等场景时&#xff0c;如果数据更新频繁或者需要分页时&#xff0c;建议使用zset12…

适合国内用户的五款ChatGPT插件

众所周知使用ChatGPT3.5需要使用魔法且不稳定&#xff0c;订阅ChatGPT4.0每月需要支付20美元&#xff0c;并且使用次数有限制。对于那些不想每年花费240美元&#xff08;超过1500元人民币&#xff09;来使用GPT4.0的朋友们来说&#xff0c;还有别的办法吗&#xff1f; 答案…

安防视频能力平台EasyNVR视频汇聚平台关闭匿名登陆的问题的解决步骤

EasyNVR是基于RTSP/Onvif协议的安防视频能力平台&#xff0c;它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发等视频能力服务&#xff0c;可覆盖全终端平台&#xff08;pc、手机、平板等终端&#xff09;&#xff0c;在智慧工厂、智慧工地、智慧社区、智慧校园等…

pbootcms系统安全防护设置大全

PbootCMS系统简介 PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统&#xff0c;是一套高效、简洁、 强悍的可免费商用的PHP CMS源码&#xff0c;能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签&#xff0c;只要懂HTML就可快速开发企业网站…

[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语句&#xff08;注解方式&#xff09; 2.1.6 测试运行 2.1.7 配…

无涯教程-Perl - unshift函数

描述 此函数按顺序将LIST中的元素放在ARRAY的开头。这与shift()相反。 语法 以下是此函数的简单语法- unshift ARRAY, LIST返回值 此函数返回ARRAY中新元素的数量。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -warray ( 1, 2, 3, 4);print "Value of a…

容斥原理 博弈论(多种Nim游戏解法)

目录 容斥原理容斥原理的简介能被整除的数&#xff08;典型例题&#xff09;实现思路代码实现扩展&#xff1a;用DPS实现 博弈论博弈论中的相关性质博弈论的相关结论先手必败必胜的证明Nim游戏&#xff08;典型例题&#xff09;代码实现 台阶-Nim游戏&#xff08;典型例题&…

16.遍历二叉树,线索二叉树

目录 一. 遍历二叉树 &#xff08;1&#xff09;三种遍历方式 &#xff08;2&#xff09;递归遍历算法 &#xff08;3&#xff09;非递归遍历算法 &#xff08;4&#xff09;层次遍历算法 二. 基于递归遍历算法的二叉树有关算法 &#xff08;1&#xff09;二叉树的建立 …

解决elementUI打包上线后icon图标偶尔乱码的问题

解决vue-elementUI打包后icon图标偶尔乱码的问题 一、背景二、现象三、原因四、处理方法方式1&#xff1a;使用css-unicode-loader方式2&#xff1a;升高 sass版本到1.39.0方式3&#xff1a;替换element-ui的样式文件方式4&#xff1a;更换打包压缩方式知识扩展&#xff1a;方式…

苹果手机桌面APP带云图标有个箭头,过一段时间经常要下载才能使用APP

环境&#xff1a; IPhone 11 IOS13.0 问题描述&#xff1a; 苹果手机桌面APP带云图标有个箭头&#xff0c;过一段时间经常要下载才能使用APP 解决方案&#xff1a; 1.打开设置&#xff0c;往下找到iTunes Store与App Store 2.找到下面卸载未使用的APP 关闭按钮

pdf格式怎么编辑?了解这种编辑方法就可以了

pdf格式怎么编辑&#xff1f;PDF作为一种通用的文档格式&#xff0c;以其跨平台、保真排版等优势在各个领域得到广泛应用。然而&#xff0c;对于许多人来说&#xff0c;PDF文件一直以来都被视为“静态”文件&#xff0c;不易编辑。但现在&#xff0c;有很多编辑器可以帮助我们进…

EureKa快速入门

EureKa快速入门 远程调用的问题 多个服务有多个端口&#xff0c;这样的话服务有多个&#xff0c;硬编码不太适合 eureKa的作用 将service的所有服务的端口全部记录下来 想要的话 直接从注册中心查询对于所有服务 每隔一段时间需要想eureKa发送请求 保证服务还存活 动手实践 …