CloudONE(2) Prometheus와 Grafana를 연동한 MongoDB Monitoring 시스템 구축기

Jiyoon·2021년 4월 5일
0

Kubernetes

목록 보기
2/10

SpaceONE 의 Main Database engine인 MongoDB의 Sharded Cluster Monitoring 티켓을 받게 되었다.

기존의 클러스터를 Monitoring 하던 Prometheus-Grafana Dashboard에 MongoDB Cluster를 추가하는 형태이다.

Installation은 다음과 같은 절차로 진행되었으며, metric을 수집하는 구조도는 아래 그림과 같다.

1) MongoDB shard cluster의 각 shard에 MongoDB exporter에 대한 yaml파일 작성. K8S Cluster에 대한 정보가 yaml에 있어서 yaml파일은 생략하도록 하겠다.

2) Yaml 파일을 mongodb-exporter helm chart를 이용해 배포.

MongoDB Dashboard Metric 정보

총 6개의 Dashboard를 생성했다.

Slack으로의 연동

Grafana에 slack을 연동해 일정 수치 이상 시 경보가 가능하다. Slack의 App config 기능을 이용해서 grafana를 등록했으며, Slack 에 alert를 건 metric들은 다음과 같다.

  • Shard elections ≥1 (shard election이 일어났다는 점은 primary 샤드가 unavailable이었다는 점을 의미하기 때문에)
  • MongoDB EC2 instance status check
  • instance cpu utilization average (≥70%,1m 마다 측정 / 1m이상 지속 시 alert)
  • Instance Disk used percent
  • Instance Memory used percent

시스템 수준 지표 수집을 위한 cloudwatch agent 설치

위의 metric중 instance disk_used_percent나 memory_used_percent와 같은 metric들은 cloudwatch agent를 이용해 수집된 metric들이다. cloudwatch agent를 각 인스턴스에 심으면, 운영 체제 전반에 걸쳐 Amazon EC2 인스턴스로부터 더 많은 시스템 수준 지표를 수집할 수 있다. Mongod의 instance 수준 memory utilization 정보를 알고 싶다고 하셔서 cloudwatch agent를 설치한 후, grafana 및 slack과 연동했다. CW agent가 동작하는 구조는 아래 그림과 같다.

Installation


cloudwatch agent구성 파일을 생성하기 전, IAM role과 IAM user를 agent가 실행될 서버에 연결한다. 적용한 IAM policy는 다음과 같다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowReadingMetricsFromCloudWatch",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:GetMetricData"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeTags",
                "ec2:DescribeInstances",
                "ec2:DescribeRegions"
            ],
            "Resource": "*"
        }
    ]
}

Step 1. S3 download link를 사용하여 cloudwatch agent package를 다운로드한다.

 root@mongo_instance# wget [https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb](https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb)

Step 2. cloudwatch wizard를 실행 및 설정한다.

root@instance:~/cloudwatch# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:
... 이하 생략

Step 3. 해당 구성을 사용하여 각 mongod 서버에 에이전트를 설치, 실행한다.

root@***:~# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

Step 4. AWS console → Cloudwatch → Metrics 에서 agent가 실행되는 인스턴스의 수집 지표들을 확인 가능하다.

Step 5. Grafana datasource 에 CW Agent를 추가하고 Dashboard 에 disk_used_percent 및 memory_used_percent 판넬을 추가해 metric을 수집한다.

profile
Jiyoon in cloud valley, Change the world Why Not? / 오픈소스 생태계를 잘 이해하는 Cloud engineer가 되고 싶은 지윤