Tài liệu hướng dẫn cấu hình Alloy để thu thập Metrics từ ứng dụng MongoDB

1. Chuẩn bị

1.1 Cài đặt alloy trên VM

Thực hiện cài đặt Alloy Agent trên máy chủ Linux bằng lệnh sau:

/bin/sh -c "$(curl -fsSL https://s3hn.smartcloud.vn/agent/alloy/linux/releases/v1.8.3/install-linux.sh)"

1.2 Tạo một User trong MongoDB để lấy metrics

use admin
db.createUser({
 user: "mongodb-exporter",
 pwd: "password_mongodb",
 roles: [
   { role: "clusterMonitor", db: "admin" }
 ]
})

Thay các trường trong cấu hình trên, trong đó:

TrườngÝ nghĩaGiá trị mẫu
mongodb-exporterUser name mongodbmongodb-exporter
passwordPassword user mongodbvnpt2o26MongoDB

   Lưu ý

  • Password user lấy metrics database không để kí tự @ trong chuỗi.
  • Chuỗi kết nối có thể bị cắt sai định dạng, dẫn đến lỗi kết nối tới MongoDB.

2. Cấu hình Alloy

Tại đường dẫn /etc/alloy/config.alloy, chỉnh sửa cấu hình Alloy để tích hợp thu thập dữ liệu MySQL:

sudo vi /etc/alloy/config.alloy

2.1 Thu thập Metrics ứng dụng

TrườngÝ nghĩaGiá trị mẫu
urlEndpoint của dịch vụ APM trên giao diện Consolehttps://metrics-0qcs3dsvvva.apm.vnptplatform.vn/api/v1/push
AuthorizationToken của dịch vụ APM trên giao diện Consolea5130b91-ff9b-41ef-8722-9d923a574123
mongodb-exporterTên user đã tạo ở mục Imongodb-exporter
password_mongodbPassword của user đã tạobXlzcWxwYXNzd29yZA==
HOST_IPIP của VM đang chạy MongoDB10.168.17.30

Thay các trường trong cấu hình sau, trong đó:

prometheus.remote_write "metrics_integrations_mongodb" {
    endpoint {
        url = "<endpoint dịch vụ APM>"
        headers = {
          "Authorization" = "<token dịch vụ APM>",
        }
    }
}
prometheus.exporter.mongodb "metrics_integrations_mongodb" {
    mongodb_uri    = "mongodb://mongodb-exporter:password_mongodb@HOST_IP:27017"
    direct_connect = true
}
discovery.relabel "metrics_integrations_mongodb" {
  targets = prometheus.exporter.mongodb.metrics_integrations_mongodb.targets

    rule {
        source_labels = ["instance"]
        regex         = "([^:]+)(?::[0-9]+)?"
        target_label  = "instance"
        replacement   = "$1"
  }            
}

prometheus.relabel "metrics_integrations_mongodb" {
    forward_to = [prometheus.remote_write.metrics_integrations_mongodb.receiver]

    rule {
    source_labels = ["__name__"]
    regex         = "up|mongodb_asserts_total|mongodb_connections|mongodb_mongod_wiredtiger_cache_overhead_percent|mongodb_mongod_db_data_size_bytes|mongodb_extra_info_page_faults_total|mongodb_instance_uptime_seconds|mongodb_memory|mongodb_mongod_asserts_total|mongodb_mongod_connections|mongodb_mongod_cursors|mongodb_mongod_extra_info_page_faults_total|mongodb_mongod_global_lock_current_queue|mongodb_mongod_metrics_cursor_open|mongodb_mongod_metrics_cursor_timed_out_total|mongodb_mongod_metrics_document_total|mongodb_mongod_metrics_get_last_error_wtime_num_total|mongodb_mongod_metrics_get_last_error_wtime_total_milliseconds|mongodb_mongod_metrics_get_last_error_wtimeouts_total|mongodb_mongod_metrics_query_executor_total|mongodb_mongod_metrics_record_moves_total|mongodb_mongod_metrics_repl_apply_batches_total_milliseconds|mongodb_mongod_metrics_repl_apply_ops_total|mongodb_mongod_metrics_repl_buffer_count|mongodb_mongod_metrics_repl_network_getmores_total_milliseconds|mongodb_mongod_metrics_repl_preload_docs_num_total|mongodb_mongod_metrics_repl_preload_docs_total_milliseconds|mongodb_mongod_metrics_repl_preload_indexes_num_total|mongodb_mongod_metrics_repl_preload_indexes_total_milliseconds|mongodb_mongod_metrics_ttl_deleted_documents_total|mongodb_mongod_op_counters_repl_total|mongodb_mongod_op_counters_total|mongodb_mongod_op_latencies_latency_total|mongodb_mongod_op_latencies_ops_total|mongodb_mongod_replset_member_election_date|mongodb_mongod_replset_member_last_heartbeat|mongodb_mongod_replset_member_optime_date|mongodb_mongod_replset_member_ping_ms|mongodb_mongod_replset_member_replication_lag|mongodb_mongod_replset_my_name|mongodb_mongod_replset_my_state|mongodb_mongod_replset_number_of_members|mongodb_mongod_replset_oplog_head_timestamp|mongodb_mongod_replset_oplog_tail_timestamp|mongodb_mongos_asserts_total|mongodb_mongos_connections|mongodb_mongos_cursors|mongodb_mongos_db_collections_total|mongodb_mongos_db_data_size_bytes|mongodb_mongos_db_index_size_bytes|mongodb_mongos_db_indexes_total|mongodb_mongos_extra_info_page_faults_total|mongodb_mongos_metrics_cursor_open|mongodb_mongos_metrics_get_last_error_wtime_num_total|mongodb_mongos_metrics_get_last_error_wtime_total_milliseconds|mongodb_mongos_metrics_get_last_error_wtimeouts_total|mongodb_mongos_metrics_ttl_deleted_documents_total|mongodb_mongos_op_counters_repl_total|mongodb_mongos_op_counters_total|mongodb_mongos_sharding_balancer_enabled|mongodb_mongos_sharding_changelog_10min_total|mongodb_mongos_sharding_chunks_is_balanced|mongodb_mongos_sharding_chunks_total|mongodb_mongos_sharding_collections_total|mongodb_mongos_sharding_databases_total|mongodb_mongos_sharding_shard_chunks_total|mongodb_mongos_sharding_shards_draining_total|mongodb_mongos_sharding_shards_total|mongodb_op_counters_repl_total|mongodb_op_counters_total|mongodb_rs_members_pingMs|mongodb_up|mongodb_version_info"
    action        = "keep"
  }
}

prometheus.scrape "metrics_integrations_mongodb" {
    targets    = discovery.relabel.metrics_integrations_mongodb.output
    forward_to = [prometheus.relabel.metrics_integrations_mongodb.receiver]
    job_name   = "integrations/mongodb"
    scrape_interval = "15s"
    scrape_timeout  = "10s"
}

3. Cài đặt

Thực hiện lệnh sau để khởi động Alloy:

sudo systemctl status alloy 

4. Kiểm tra

4.1 Kiểm tra dịch vụ

Thực hiện lệnh sau:

sudo systemctl status alloy 

Hệ thống trả về như sau nếu thành công:

● alloy.service - Vendor-agnostic OpenTelemetry Collector distribution with programmable pipelines
    Loaded: loaded (/lib/systemd/system/alloy.service; enabled; vendor preset: enabled)
    Active: active (running) since Thu 2025-04-24 18:25:30 +07; 14h ago
      Docs: https://grafana.com/docs/alloy
   Process: 312064 ExecReload=/usr/bin/env kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  Main PID: 4041003 (alloy)
     Tasks: 18 (limit: 9385)
    Memory: 80.3M
       CPU: 38min 6.739s
    CGroup: /system.slice/alloy.service
            └─4041003 /usr/bin/alloy run --server.http.listen-addr=0.0.0.0:30000 --storage.path=/var/lib/alloy/data /e>

Nếu không thành công, xem log Alloy:

sudo journalctl -u alloy -ex 

Sau đó chỉnh sửa cấu hình nếu cần và khởi động lại:

sudo systemctl restart alloy 

4.2 Kiểm tra tích hợp

Tham khảo hướng dẫn tích hợp dashboard, kiểm tra metrics MongoDB trên giao diện Dashboard:

Một số dashboard mẫu khi tích hợp thành công: