• 使用Loki收集网络设备日志

    前言

    Loki是Grafana Labs团队的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统,它的设计非常简洁易于操作。

    受Prometheus启发的,可以水平扩展、高可用以及支持多租户的日志聚合系统,使用了和Prometheus相同的服务发现机制,将标签添加到日志流中而不是构建全文索引,从promtail接收到的日志和应用的Metrics指标就有相同的标签集,不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。

    日常的网络运维中,如果能把网络设备的日志收集起来,集中查看,在处理故障或日常巡检时,会比较方便一些

    如果没有专业的日志收集硬件或软件设备,那么可以搭建Loki进行收集,并使用Grafana查看收集好的日志

    本文的主要内容如下:

    1. 如何安装部署loki
    2. 如何配置网络设备的syslog
    3. 如何使用rsyslog收集到网络设备的日志
    4. 如何配置Grafana并查看日志

    环境准备

    1台主机,可以是云主机、虚机,可以根据日志的多少来决定配置的大小,本实验中的配置是4C8G的

    OS为Debian11,但其他发行版如CentOS,大部分情况下也是适用的

    该主机将会安装loki,rsyslog、promtail

    *本文档不再介绍如何安装Grafana

    安装部署Loki

    1. 下载最新的版本

      https://github.com/grafana/loki/releases/[1]

      在Linux中安装时可下载loki-linux-amd64.zip

    2. 解压可执行文件到目标目录

      unzip -d /usr/local/bin/ loki-linux-amd64.zip
      
    3. 创建用户

      useradd -r -s /sbin/nologin loki
      
    4. 创建配置文件

      mkdir -pv /etc/loki /data/loki
      
      chown -R loki:loki /etc/loki
      
    5. 编辑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
    6. 请修改以上几项内容

      1. instance_addr,修改为安装主机的IP地址
      2. alertmanager_url:修改为alertmanager的url,本次并未使用alertmanager,所以写的localhost
    7. 编辑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
      
    8. 启动并设置为开机自启动

      systemctl start loki; systemctl enable loki
      
      systemctl status loki
      

    安装并配置promtail

    1. 从 https://github.com/grafana/loki/releases[3] 下载安装包

    2. 下载示例的配置文件

      wget https://raw.githubusercontent.com/grafana/loki/master/cmd/promtail/promtail-local-config.yaml
      

      也可以直接使用如下的示例配置,注意个别地址需要修改,已进行注释

      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
      
      
    3. 调整promtail执行文件和配置文件的路径

      mv promtail-linux-amd64 /usr/local/bin/
      
      mkdir -pv /etc/promtail; mv promtail-local-config.yaml config-promtail.yml
      
    4. 创建用户并修改文件的权限

      useradd -r promtail
      
      chown promtail:promtail /tmp/positions.yaml
      
    5. 编辑 Promtail.service

      vim /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 
      
    6. 启动服务

      systemctl start promtail
      
      systemctl enable promtail 
      

    使用rsyslog收集到网络设备的日志

    · 搭建并配置rsyslog

    1. 配置文件如下

      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
      & ~
      

      %HOSTNAME%-%FROMHOST-IP%.log是日志文件的名字,表示主机名+发送源主机的IP

    2. 重启服务

      systemctl restart rsyslog
      

    配置交换机发送日志到Loki

    · Cisco交换机

    # 设置发送日志的源端口
    logging source-interface Vlan99
    
    # 设置目标主机
    logging 10.20.20.20
    

    · 华为交换机

    # 根据实际情况修改源接口,或者不配置
    info-center loghost source Vlanif999
    
    # 设置 syslog 的目标主机
    info-center loghost 10.20.20.20
    
    # 默认情况下是Info级别,所以此命令可以不执行
    info-center source default channel loghost log level informational
    
    

    · 配置Grafana

    1. 导入ID为13639的Dashboard

    2. 配置Variables,建议的配置如下

    3. 查看日志

    参考资料:

    [1]https://github.com/grafana/loki/releases/: https://github.com/grafana/loki/releases/
    [2]Systemd: https://www.wolai.com/5YUVEN1zqVdZG2inbWBKh9
    [3]https://github.com/grafana/loki/releases: https://github.com/grafana/loki/releases
    «
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单