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
를 이용해 배포.
총 6개의 Dashboard를 생성했다.
Grafana에 slack을 연동해 일정 수치 이상 시 경보가 가능하다. Slack의 App config 기능을 이용해서 grafana를 등록했으며, Slack 에 alert를 건 metric들은 다음과 같다.
위의 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가 동작하는 구조는 아래 그림과 같다.
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을 수집한다.
참고했던 링크들
https://medium.com/@labcloud/ec2%EC%97%90-cloudwatch-agent-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-e7113cdc396e
https://prometheus.io/docs/prometheus/latest/querying/api/
https://blog.naver.com/PostView.nhn?blogId=alice_k106&logNo=221535575875
https://badcandy.github.io/2018/12/25/prometheus-architecture/
https://github.com/prometheus-operator/prometheus-operator
https://medium.com/finda-tech/kube-state-metrics%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-1303b10fb8f8