Saturday, January 18, 2025

Quy trình giám sát thiết bị mạng với Grafana và SNMP Exporter

-

Bài viết này mình sẽ hướng dẫn quy trình sử dụng SNMP (Simple Network Management Protocol) để giám sát và quản lý các thiết bị mạng như switch, router, firewall và cách hiển thị dữ liệu từ các thiết bị này trên Grafana thông qua snmp_exporter.

  • SNMP là gì?: SNMP là viết tắt của Simple Network Management Protocol, là một giao thức tiêu chuẩn được sử dụng để thu thập thông tin từ các thiết bị mạng và tổ chức thông tin đó để con người có thể đọc và hiểu. Giao thức này cho phép đọc và ghi dữ liệu từ/thành các thiết bị mạng. SNMP dựa trên MIBs (Management Information Base), là các đối tượng mô tả các loại thông tin có thể đọc từ thiết bị hoặc ghi vào thiết bị.
  • snmp_exporter là gì?: snmp_exporter là một ứng dụng/đối tượng được sử dụng để thu thập thông tin từ các thiết bị mạng sử dụng SNMP và đưa thông tin đó cho Prometheus, một hệ thống giám sát.
  • Cấu hình snmp_exporter:
    • Để cấu hình snmp_exporter, bạn cần ba thành phần chính:
      • Thứ nhất, bạn cần một máy chủ Prometheus hoặc Grafana Agent để giám sát các thiết bị qua snmp_exporter.
      • Thứ hai, nếu bạn không sử dụng cấu hình có sẵn đi kèm với snmp_exporter, bạn cần một công cụ gọi là “generator” để tạo ra file cấu hình snmp.yml sử dụng thông tin từ MIBs. Generator này sử dụng NetSNMP để phân tích cú pháp MIBs và tạo file cấu hình.
      • Thứ ba, bạn cần snmp_exporter thực hiện việc lấy dữ liệu qua SNMP từ các thiết bị mạng và đưa kết quả cho Prometheus.
  • Cấu hình generator: Generator quan trọng vì nó cho phép bạn chỉ định xác thực, đối tượng được lấy, hoặc ánh xạ đối tượng đó vào các bộ nhãn (label) trong Prometheus. Bạn không nên chỉnh sửa file cấu hình snmp.yml thủ công mà thay vào đó sử dụng generator.
  • Làm thế nào để cấu hình generator:
    • Trước hết, SNMP cần được kích hoạt trên các thiết bị bạn muốn giám sát. Hãy tham khảo tài liệu của nhà sản xuất về cách kích hoạt SNMP trên từng thiết bị cụ thể.
    • Lưu ý rằng bạn cần lưu các MIBs của nhà sản xuất ở đúng đường dẫn: ./snmp_exporter/generator/mibs.
    • Chạy lệnh snmpwalk trên thiết bị mục tiêu để lấy thông tin.
    • Ví dụ: snmpwalk -v2c -c public 192.168.2.1 1.3.6.1. Lệnh này sử dụng SNMP version 2c, chuỗi community là “public” (khuyến khích không nên để tên public mặc định này) và địa chỉ IP của thiết bị. OID (Object Identifier) gốc được chỉ định cuối cùng. Nếu được hỗ trợ trên thiết bị của bạn và bạn muốn đảm bảo tính bảo mật nâng cao, SNMP v3 là sự lựa chọn được khuyến nghị.
  • Số lượng OIDs:
    • Khi chạy lệnh snmpwalk, bạn sẽ thấy có hơn 5.000 OIDs xuất hiện. Điều này có thể làm cho quá trình thu thập dữ liệu SNMP trở nên rất phức tạp và không cần thiết. Bạn cần lựa chọn các OIDs cụ thể mà bạn thực sự cần dựa trên mục đích sử dụng của bạn.

Bạn cần xác định cụ thể thông tin cần thu thập, trong ví dụ này là sử dụng các MIB (Management Information Base) liên quan đến interface (if_mib) và các MIB đặc thù của nhà sản xuất thiết bị.

Dưới đây là một ví dụ về file cấu hình generator.yml mà bạn có thể sử dụng để tạo ra các file cấu hình snmp.yml để thu thập thông tin từ các thiết bị mạng. Trong ví dụ này:

  • SNMP version được đặt thành SNMP v2.
  • Community string được đặt là “public” (lưu ý rằng “public” thường là giá trị mặc định, nhưng không được khuyến nghị dùng giá trị này do không an toàn).
  • MIBs được chỉ định cho việc thu thập thông tin từ giao diện mạng (if_mib) và các MIB đặc thù của nhà sản xuất.

Dưới đây là ví dụ về nội dung file generator.yml:

modules:
  # Default IF-MIB interfaces table with ifIndex.
  if_mib_if_name:
    walk: [sysUpTime, interfaces, ifXTable]
    lookups:
      - source_indexes: [ifIndex]
        lookup: ifAlias
      - source_indexes: [ifIndex]
        # Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
        lookup: 1.3.6.1.2.1.2.2.1.2 # ifDescr
      - source_indexes: [ifIndex]
        # Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
        lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
    overrides:
      ifAlias:
        ignore: true # Lookup metric
      ifDescr:
        ignore: true # Lookup metric
      ifName:
        ignore: true # Lookup metric
      ifType:
        type: EnumAsInfo
    auth:
      community: public

  ubiquiti_unifi:
    walk:
      - sysUpTime
      - interfaces
      - ifXTable
      - 1.3.6.1.4.1.41112.1.6 # ubntUniFi
    overrides:
      ifType:
        type: EnumAsInfo
    auth:
      community: public 

Cách cấu hình và chạy snmp-generatorsnmp_exporter để thu thập và xuất dữ liệu từ các thiết bị mạng sử dụng SNMP.

Xây dựng snmp-generator hoặc chạy trong Docker.

Bạn có thể xây dựng snmp-generator từ mã nguồn hoặc chạy nó trong Docker. Để chạy trong Docker, bạn có thể sử dụng lệnh sau:

docker build -t snmp-generator .

Sau đó, bạn cần tạo file cấu hình generator.yml trong thư mục ./snmp_exporter/generator.yml hoặc sử dụng ví dụ được cung cấp trong bài viết.

snmp-generator sử dụng NetSNMP để phân tích MIBs và tạo cấu hình cho snmp_exporter, vì vậy bạn cần đảm bảo rằng các MIBs được đặt ở đúng đường dẫn, ví dụ: ./snmp_exporter/generator/mibs.

Sau khi đã tạo cấu hình generator.yml, bạn có thể chạy lệnh sau để tạo cấu hình cho snmp_exporter:

docker run -ti -v "${PWD}:/opt/" snmp-generator generate

Kết quả của lệnh này sẽ xuất hiện trên màn hình và nó sẽ hiển thị quá trình tạo cấu hình.

Cấu hình snmp_exporter.

Nếu bạn đã tải xuống và giải nén snmp_exporter, hãy chắc chắn rằng bạn đã xóa hoặc đổi tên file snmp.yml mặc định được đi kèm.

Sao chép file cấu hình snmp.yml mới được tạo bởi snmp-generator từ thư mục ./snmp_exporter/generator/ vào thư mục snmp_exporter.

Bây giờ, bạn có thể bắt đầu dịch vụ snmp_exporter bằng lệnh sau:

./snmp_exporter

Kiểm tra hoạt động của snmp_exporter.

Bạn có thể kiểm tra xem snmp_exporter có hoạt động bằng cách truy cập URL của máy chủ. Ví dụ: http://192.168.2.213:9116/. Điều này sẽ hiển thị giao diện web của snmp_exporter và cho bạn biết nó đã bắt đầu hoạt động và sẵn sàng thu thập dữ liệu từ các thiết bị mạng sử dụng SNMP.

Khi bạn hoàn thành các bước này, bạn đã cấu hình và triển khai snmp-generatorsnmp_exporter, và bạn có thể bắt đầu giám sát và thu thập dữ liệu từ các thiết bị mạng của bạn thông qua snmp_exporter.

Cách cấu hình Prometheus để thu thập dữ liệu từ snmp_exporter và cách tạo dashboard Grafana để hiển thị thông tin thu thập được từ các thiết bị mạng sử dụng SNMP.

Dưới đây là các bước cụ thể:

Cấu hình prometheus.yml.

Bạn cần thêm cấu hình cho snmp_exporter vào file cấu hình Prometheus của bạn (thường là prometheus.yml).

Đây là một ví dụ về cách thêm target SNMP vào file cấu hình Prometheus.

- job_name: 'network'
  static_configs:
  - targets: ['192.168.2.1']
    labels:
      job: 'gateway'
  - targets: ['192.168.2.90']
    labels:
      job: 'downstairsap'
  - targets: ['192.168.2.89']
    labels:
      job: 'upstairsap'
  - targets: ['192.168.2.12']
    labels:
      job: 'switch'
  metrics_path: /snmp
  params:
    module: [if_mib_ifname]
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: 192.168.2.213:9116  # Địa chỉ của SNMP exporter:port.

Trong ví dụ này, bạn đang thêm target SNMP từ các thiết bị mạng với các địa chỉ IP khác nhau và đặt các nhãn (labels) cho từng target để xác định công việc (job) của nó. Đảm bảo rằng đường dẫn metrics_path và các cấu hình khác phù hợp với cài đặt của bạn.

Tạo Grafana Dashboard.

Bạn có thể tạo dashboard Grafana để hiển thị thông tin thu thập từ snmp_exporter. Ví dụ về dashboard được tạo bằng dữ liệu thu thập từ snmp_exporter được đưa ra trong bài viết, nhưng không có mã cụ thể về cách tạo nó.

Để tạo dashboard Grafana, bạn cần đăng nhập vào Grafana, chọn tạo bảng mới và cấu hình nguồn dữ liệu (data source) để liên kết với Prometheus. Sau đó, bạn có thể tạo truy vấn Prometheus và thiết kế dashboard để hiển thị thông tin mạng của bạn theo cách tùy chỉnh.

Khi bạn hoàn thành các bước này, bạn sẽ có Prometheus đang thu thập dữ liệu từ snmp_exporter và một dashboard Grafana để hiển thị thông tin thu thập được từ các thiết bị mạng của bạn một cách trực quan.

Kết luận.

Bài viết này đã giới thiệu về cách giám sát các thiết bị mạng trong Grafana bằng cách sử dụng snmp_exportergenerator. Hy vọng rằng bài viết đã giúp bạn hiểu rõ hơn về cách sử dụng snmp_exporter và cách cấu hình để bắt đầu giám sát các thiết bị mạng của riêng bạn. Bạn cũng có thể tham khảo hướng dẫn cho người mới bắt đầu về giám sát mạng bằng cách sử dụng SNMP mixin và Grafana.

Chúc bạn thành công trong việc giám sát và quản lý mạng của mình sử dụng các công cụ mạnh mẽ như Prometheus và Grafana.

Tham khảo nguồn https://grafana.com/blog/2022/02/01/an-advanced-guide-to-network-monitoring-with-grafana-and-prometheus/.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories