Cấu hình Prometheus tự động giám sát AWS EC2 – Service Discovery

Cấu hình Prometheus tự động giám sát AWS EC2 – Service DiscoveryCuongquach.com | Theo cách thông thường khi cập nhật một host trên dịch vụ Prometheus thì thường ta phải cấu hình qua file config, có thể là config trực tiếp vào file hoặc cấu hình ra 1 file list host json rồi trong Prometheus cấu hình load các file json host (file-based service discovery). Nhưng liệu bạn đã biết Prometheus có hỗ trợ tính năng Service Discovery, cho phép bạn tự động tìm kiếm và giám sát các máy chủ hay không ? Các đối tượng máy chủ mà Service Discovery Prometheus hỗ trợ gồm :

  • AWS EC2
  • Consul
  • Kubernetes

Trong bài viết này chúng ta sẽ tìm hiểu cách cấu hình Prometheus tìm kiếm (service discovery) và giám sát tự động các máy chủ AWS EC2 trên AWS.

prometheus-tu-dong-giam-sat-aws-ec2-service-discovery

Mô hình lab

Với mô hình lab như vậy bạn cần đáp ứng các điều kiện sau :

  • Hai máy chủ AWS EC2 Linux 1,2 đã cài đặt Node Exporter và mở firewall local cho port 9100.
  • Hai máy chủ AWS EC2 Linux 1,2 cần được cấu hình Security Group cho phép truy cập port 9100 Node Exporter.
aws ec2 lab prometheus
aws ec2 lab prometheus

Prometheus sẽ sử dụng thông tin IAM User để chủ động query API AWS nhằm liệt kê danh sách máy chủ AWS EC2 mà chúng ta cần monitor. Từ đó tạo nên một danh sách các host trong target monitor cùng port tương ứng để pull dữ liệu metrics.

Cấu hình Prometheus tìm kiếm và giám sát AWS EC2

Đầu tiên bạn cần khởi tạo một IAM User với policy đơn giản ‘AmazonEC2ReadOnlyAccess‘, cho phép liệt kê được danh sách các máy chủ AWS EC2 với thông tin cơ bản về nó. Thao tác tạo IAM User cũng không quá phức tạp, bạn có thể chủ động tìm hiểu. Một số hình ảnh tạo IAM User như dưới.

– Tạo user IAM tên mong muốn.

iam user service discovery prometheus
iam user service discovery prometheus

– Khởi tạo hoàn tất với policy mong muốn, kèm theo đó là thông tin Access Key IDSecret Access key.

iam user service discovery prometheus - 2
iam user service discovery prometheus – 2

– Coi lại thông tin user ở ngoài trang quản lý IAM.

iam user service discovery prometheus - 3
iam user service discovery prometheus – 3

Giờ bạn ssh vào máy chủ dịch vụ Prometheus rồi chỉnh sửa file cấu hình dịch vụ Prometheus. Thêm thông tin region, access key, secret key của user có quyền coi thông tin AWS EC2 mà ta đã tạo ở trên. Khai báo target port là 9100 dùng cho dịch vụ Node Exporter dưới máy chủ Client. Nếu bạn xài service Exporter khác thì khai báo tên cùng port khác.

# vi /etc/prometheus/prometheus.yml

scrape_configs:
  - job_name: 'aws-ec2-node-exporter'
    ec2_sd_configs:
      - region: ap-southeast-1
        access_key: AKIAWZNG2NCBZXXXXXX
        secret_key: yh4Wct9r8lhcE4YJO2Nexxxxxxxxxxxxxxxx
        port: 9100

Bạn truy cập trang quản lý Prometheus ở phần ‘service discovery‘ và ‘targets.
Ví dụ: http://prometheus.cuongquachlab.com:9090/service-discovery

prometheus service discovery link
prometheus service discovery link

Ví dụ: http://prometheus.cuongquachlab.com:9090/targets

prometheus targets link
prometheus targets link

Relabeling

Đây là một trong những phần khá quan trọng khi sử dụng với tính năng Service Discovery nhằm tìm kiếm các máy chủ Host EC2 trên AWS. Chúng ta sẽ có những nhu cầu :

  • Chỉ tìm kiếm và monitor những máy chủ thuộc đối tượng dịch vụ cụ thể, dựa trên tag tên của EC2 hoặc tag khác của EC2 chẳng hạn.
  • Thay đổi target label hoặc thêm target label dựa vào source label.

Một data mẫu về Discovery LabelsTarget Labels, các bạn có thể coi lại đường dẫn ‘/service-discovery‘ của Prometheus.

+ Discovery Labels

__address__="10.110.15.175:9100"
__meta_ec2_availability_zone="ap-southeast-1c"
__meta_ec2_instance_id="i-xxxxx"
__meta_ec2_instance_state="running"
__meta_ec2_instance_type="t2.nano"
__meta_ec2_owner_id="xxxxx"
__meta_ec2_primary_subnet_id="subnet-xxxxx"
__meta_ec2_private_dns_name="ip-10-110-15-175.ap-southeast-1.compute.internal"
__meta_ec2_private_ip="10.110.15.175"
__meta_ec2_subnet_id=",subnet-xxxxx,"
__meta_ec2_tag_Name="CuongQuach-Linux-2"
__meta_ec2_vpc_id="vpc-xxxxx"
__metrics_path__="/metrics"
__scheme__="http"
job="aws-ec2-node-exporter"

+ Target Labels

instance="10.110.15.175:9100"
job="aws-ec2-node-exporter"

Giờ giả sử nếu để mặc định thì Prometheus tìm kiếm và monitor hết tất cả AWS EC2 kể cả máy chủ Prometheus như lab trên, nhưng mà mình chỉ muốn monitor mỗi các máy chủ EC2 có tag tên có chữ ‘Linux‘ thôi thì sao đây.

Kế đến mình cũng muốn thay thông tin target label instance từ địa chỉ IP thành tên hostname của EC2 đó thì thế nào. Phần cấu hình Regex các bạn tự nghiên cứu nhé.

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'prometheus_master'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'aws-ec2-node-exporter'
    ec2_sd_configs:
      - region: ap-southeast-1
        access_key: AKIAWZNG2NCBZXXXXXX
        secret_key: yh4Wct9r8lhcE4YJO2Nexxxxxxxxxxxxxxxx
        port: 9100
    relabel_configs:
      # Only monitor instances with a Name has string "Linux"
      - source_labels: [__meta_ec2_tag_Name]
        regex: .*Linux.*
        action: keep
      # Use the tag name Instance as the instance label
      - source_labels: [__meta_ec2_tag_Name]
        target_label: instance

Khởi động lại dịch vụ Prometheus.

# systemctl restart prometheus

Truy cập lại trang ‘targets‘ trên Prometheus sẽ thấy còn 2 endpoint host client là Linux* và label ‘Instance‘ cũng được đổi tên rồi này.

Nguồn: https://cuongquach.com/

Previous articleHướng dẫn reload cấu hình dịch vụ Prometheus
Next articleDownload Windows Server 2016 ISO
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !