托管网站,网站制作网页,win2003网站建设,大型网站模板在将Graylog部署到生产环境时#xff0c;我们遇到了一些问题#xff0c;其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! 】。…在将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。 LokiLoki是Grafana Loki系统的核心它是一个分布式日志存储系统。Loki与传统的日志存储不同它使用流水线处理和索引数据以便在查询时可以快速访问所需的日志数据。Loki使用基于标签的存储模型并支持水平扩展使您能够处理大量的日志数据。 PromtailPromtail是一个日志收集代理它负责从各个源如文件、系统日志、容器日志等收集日志数据并将其发送到Loki进行存储。Promtail可以与各种各样的日志源进行集成并支持标准的日志格式如JSON、GELF等。
Go Netflow CollectorgoNfCollector
goNfCollector帮助您从网络设备中收集Netflow数据。它将所需的所有信息存储在InfluxDB中以便进行进一步的分析并使用Grafana进行可视化。
Grafana
Grafana是一个流行的开源数据可视化平台。它提供了强大的数据可视化功能和丰富的插件生态系统使用户能够创建仪表盘、报表和警报并对数据进行深入的分析。Grafana与Grafana LokiInfluxDB等可以结合使用通过数据源您可以在Grafana中轻松地创建日志查询和仪表盘将日志数据与监控数据进行统一展示和分析。
部署
环境说明
Ubuntu 22.04Docker version 24.0.5Docker 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(loadimuxsock) # provides support for local system logging
module(loadimmark) # provides --MARK-- message capability# provides UDP syslog reception
module(loadimudp)
input(typeimudp port514)# provides TCP syslog reception
module(loadimtcp)
input(typeimtcp port514)# provides kernel logging support and enable non-kernel klog messages
module(loadimklog permitnonkernelfacilityon)$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(loadimudp): 加载imudp模块它提供了UDP协议的syslog接收功能。UDP是一种无连接的协议用于接收远程主机发送的syslog消息。 input(typeimudp port514): 配置UDP syslog的输入。它指定rsyslogd监听本地端口514以接收UDP syslog消息。 module(loadimtcp): 加载imtcp模块它提供了TCP协议的syslog接收功能。与UDP不同TCP是一种面向连接的协议可以提供可靠的消息传递。 input(typeimtcp port514): 配置TCP syslog的输入。它指定rsyslogd监听本地端口514以接收TCP syslog消息。 module(loadimklog permitnonkernelfacilityon): 加载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 5142. 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文件就可以了并且将上一步中的influxdbnfcolector合并到一起并修改下network设置。
version: 3networks:loki:external: trueservices:loki:image: grafana/loki:2.8.0ports:- 3100:3100volumes:- 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_ENABLEDtrue- GF_AUTH_ANONYMOUS_ORG_ROLEAdmin- GF_INSTALL_PLUGINSgrafana-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:3000volumes:- 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:8089networks:- lokinfcolector:image: javadmohebbi/gonfcollectorrestart: always# network_mode: hostports:- 6859:6859/udpvolumes:- /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_DEBUGtrue# total number of cpu nfcollector could use- NFC_CPU_NUM0- NFC_LISTEN_ADDRESS0.0.0.0- NFC_LISTEN_PORT6859- NFC_INFLUXDB_HOSTinfluxdb- NFC_INFLUXDB_PORT8086- NFC_INFLUXDB_TOKEN5vqt0q0b4g_lZwNgp7-8GgPq5Nxf3YY37xbVZP_ypeK_G3dwdNlTrAkcKN_Q6QzbmG-Th96lT_65Kp0j2UD1HA- NFC_INFLUXDB_BUCKETnfCollector- NFC_INFLUXDB_ORGOPENINTELLIGENCE- 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