使用Loki收集網路設備日誌

2022.12.29

使用Loki收集網路設備日誌


Loki是Grafana Labs團隊的開源專案,是一個水準可擴展,高可用性,多租戶的日誌聚合系統,它的設計非常簡潔易於操作。

前言

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,建议的配置如下

图片

查看日志

圖片