使用Loki收集網路設備日誌
使用Loki收集網路設備日誌
前言
Loki是Grafana Labs團隊的開源專案,是一個水準可擴展,高可用性,多租戶的日誌聚合系統,它的設計非常簡潔易於操作。
受Prometheus啟發的,可以水平擴展、高可用以及支援多租戶的日誌聚合系統,使用了和Prometheus相同的服務發現機制,將標籤添加到日誌流中而不是構建全文索引,從promtail接收到的日誌和應用的Metrics指標就有相同的標籤集,不僅提供了更好的日誌和指標之間的上下文切換,還避免了對日誌進行全文索引。
日常的網路運維中,如果能把網路設備的日誌收集起來,集中查看,在處理故障或日常巡檢時,會比較方便一些
如果沒有專業的日誌收集硬體或軟體設備,那麼可以搭建Loki進行收集,並使用Grafana查看收集好的日誌
本文的主要內容如下:
- 如何安裝部署loki
- 如何配置網路設備的syslog
- 如何使用rsyslog收集到網路設備的日誌
- 如何配置Grafana並查看日誌
環境準備
1台主機,可以是雲主機、虛機,可以根據日誌的多少來決定配置的大小,本實驗中的配置是4C8G的
OS為Debian11,但其他發行版如CentOS,大部分情況下也是適用的
該主機將會安裝loki,rsyslog、promtail
*本文檔不再介紹如何安裝Grafana
安裝部署Loki
下載最新的版本 https://github.com/grafana/loki/releases/[1]在Linux中安裝時可下載loki-linux-amd64.zip
解壓可執行檔到目標目錄
unzip -d /usr/local/bin/ loki-linux-amd64.zip
- 1.
創建使用者
useradd -r -s /sbin/nologin loki
- 1.
創建配置檔
mkdir -pv /etc/loki /data/loki
chown -R loki:loki /etc/loki
- 1.
- 2.
- 3.
編輯Loki的配置檔
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /data/loki
storage:
filesystem:
chunks_directory: /data/loki/chunks
rules_directory: /data/loki/rules
replication_factor: 1
ring:
instance_addr: 10.20.20.20
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
請修改以上幾項內容
instance_addr,修改為安裝主機的IP位址
alertmanager_url:修改為alertmanager的url,本次並未使用alertmanager,所以寫的localhost
編輯Systemd[2]的服務配置檔vim /lib/systemd/system/loki.service
[Unit]
Description=Loki service
After=network.target
[Service]
Type=simple
User=loki
ExecStart=/usr/local/bin/loki-linux-amd64 -config.file /etc/loki/loki-my-config.yaml
[Install]
WantedBy=multi-user.target
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
啟動並設置為開機自啟動
systemctl start loki; systemctl enable loki
systemctl status loki
- 1.
- 2.
- 3.
安裝並配置promtail
從 https://github.com/grafana/loki/releases[3] 下載安裝包
下載範例的配置檔
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/promtail/promtail-local-config.yaml
- 1.
也可以直接使用如下的範例配置,注意個別位址需要修改,已進行註釋
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /etc/promtail/positions.yaml
clients:
# 将地址修改为实际的 loki Server 的地址
- url: http://10.20.20.20:3100/loki/api/v1/push
scrape_configs:
- job_name: loki
static_configs:
- targets:
- localhost
labels:
job: syslog
env: prod
location: whcq
vendor: loki
hostname: m-loki
__path__: /var/log/network/m-loki-127.0.0.1.log
- job_name: syslog
static_configs:
- targets:
- localhost
labels:
job: syslog
env: prod
location: whcq # 设备的机房或者所在的位置
vendor: huawei # 品牌
hostname: Test-S6720-254 # 主机名
__path__: /var/log/network/Test-S6720-254-10.20.99.254.log # 日志的路径
- job_name: syslog
static_configs:
- targets:
- localhost
labels:
job: syslog
env: prod
location: shbd
vendor: cisco
hostname: Test-C3560G
__path__: /var/log/network/192.168.99.254-192.168.99.254.log
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
调整promtail执行文件和配置文件的路径
mv promtail-linux-amd64 /usr/local/bin/
mkdir -pv /etc/promtail; mv promtail-local-config.yaml config-promtail.yml
- 1.
- 2.
- 3.
创建用户并修改文件的权限
useradd -r promtail
chown promtail:promtail /tmp/positions.yaml
- 1.
- 2.
- 3.
编辑 Promtail.servicevim /lib/systemd/system/promtail.service
[Unit]
Description=Promtail service
After=network.target
[Service]
Type=simple
User=promtail
ExecStart=/usr/local/bin/promtail -config.file /etc/promtail/config-promtail.yml
[Install]
WantedBy=multi-user.target
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
启动服务
systemctl start promtail
systemctl enable promtail
- 1.
- 2.
- 3.
使用rsyslog收集到网络设备的日志
- 搭建并配置rsyslog
配置文件如下vim /etc/rsyslog.conf
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
$template IpTemplate,"/var/log/network/%HOSTNAME%-%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
%HOSTNAME%-%FROMHOST-IP%.log是日志文件的名字,表示主机名+发送源主机的IP
重启服务
systemctl restart rsyslog
- 1.
配置交换机发送日志到Loki
- Cisco交换机
# 设置发送日志的源端口
logging source-interface Vlan99
# 设置目标主机
logging 10.20.20.20
- 1.
- 2.
- 3.
- 4.
- 5.
- 华为交换机
# 根据实际情况修改源接口,或者不配置
info-center loghost source Vlanif999
# 设置 syslog 的目标主机
info-center loghost 10.20.20.20
# 默认情况下是Info级别,所以此命令可以不执行
info-center source default channel loghost log level informational
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 配置Grafana
导入ID为13639的Dashboard
配置Variables,建议的配置如下
查看日志