
eks에 서비스를 배포하면서 수많은 에러를 맛보았지만, 이렇게 이틀이나 걸린 에러는 처음이었기에,,, 작성하게 된 블로그! 사실 쓸 건 정~~말 많았지만 공부하고 적용하는데 시간을 더 투여하느라 바로바로 작성하지 못했다. 일단 시작
문제 상황: Datadog을 성공적으로 연결하고나서 이런 에러가 떴다.
Datadog’s redisdb integration is reporting:
Instance #redisdb:[ERROR]: [{"message":"Authentication required.","traceback":"Traceback (most recent call last):\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/datadog_checks/base/checks/base.py\", line 1317, in run\n self.check(instance)\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/datadog_checks/redisdb/redisdb.py\", line 566, in check\n self._check_db()\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/datadog_checks/redisdb/redisdb.py\", line 217, in _check_db\n conn.ping()\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/commands/core.py\", line 1219, in ping\n return self.execute_command(\"PING\", kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/client.py\", line 623, in execute_command\n return self._execute_command(*args, options)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/client.py\", line 629, in _execute_command\n conn = self.connection or pool.get_connection()\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/utils.py\", line 191, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/connection.py\", line 1530, in get_connection\n connection.connect()\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/connection.py\", line 379, in connect\n self.connect_check_health(check_health=True)\n File \"/opt/datadog-agent/embedded/lib/python3.12/site-packages/redis/connection.py\", line 397, in connect_check_health\n
이런식으로... 아주 길게 에러를 알려줬다. 원래 첫 설치하고나서 분명 문제 없는걸 확인했는데, 다음 날 출근하니까 떴다...^^ 에러를 읽어봤을 때, argoCD의 redisdb에 인증이 되지 않아서 pod의 metric을 수집하지 못한다는 상황이었다. 그래도 어렵지 않을 것 같다는 생각이 들었는데 이게 이틀이나 잡아먹을 줄이야ㅋㅋ

심지어 목요일 오전에 발견했는데, 금요일에도 해결 못하면 주말내내 스트레스 받을 것 같아서 금요일 오후부터 초조해지기 시작했다. "아 이걸 끝내고 불금을 보내고 싶다!" 라는 목표로 정말 열심히 했다.
일단 에러가 상당히 명확한 편이라서, argoCD의 redis 서버 auth token이 kubernetes secret에 잘 저장되어있는지 확인해보고 그 후 필요한 설정들을 해주었다. 첫째날에는 ai를 열심히 패서 문제를 해결하려고 했지만 절!대! 해결되지 않는걸 보고 내가 하나하나 다시 순차적으로 확인하면서 어느 부분이 연결이 잘 안되어있는지 파악했다.
공식문서를 다시 차근차근 찾아보니,
apiVersion: v1
kind: Pod
metadata:
name: redis
annotations:
ad.datadoghq.com/redis.checks: |
{
"redisdb": {
"init_config": {},
"instances": [
{
"host": "%%host%%",
"port":"6379",
"password":"%%env_REDIS_PASSWORD%%"
}
]
}
}
labels:
name: redis
spec:
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 6379
redis의 value에 datadog agent가 알아차릴 수 있게 annotation을 붙여주는 방법을 사용하고 있었다. 하지만 여전히 문제는 해결되지 않았다.
진짜 얘 왜이래;; 라는 생각으로 내가 뭘 파악하고 있지 못하는건지 상황을 적어보았다.

혹시 argocd와 datadog이 설치되어있는 namespace가 다른데 내가 설정을 제대로 못해줘서 계속 무시하는건가? 싶어서 argocd도 배포했던것 싹 삭제하고 datadog이 설치되어있는 namespace에 설치했다. 그리고 순차적으로
1. Auth 설정이 잘 되어있는가
2. 잘 되어있다면 환경변수를 잘 넘겨받고 있는가
3. 현재 설정된 password로 cli에서는 ping pong이 되는가
를 확인하며 범위를 좁혀나갔다.
하지만 어떻게해도 datadog에서 redis server에 접근하려고 할 때 사용되는 auto discovery 기능에서 기본적으로 제공되는 auto_conf.yaml 파일만 계속해서 적용되고, 내가 적용하고자 하는 password는 무시가 되고 있었다. 이 파일을 어디서 적용해주는지 datadog repository를 직접 들어가보니
## @param ad_identifiers - list of strings - required
## A list of container identifiers that are used by Autodiscovery to identify
## which container the check should be run against. For more information, see:
## https://docs.datadoghq.com/agent/guide/ad_identifiers/
#
ad_identifiers:
- redis
## All options defined here are available to all instances.
#
init_config:
## Every instance is scheduled independently of the others.
#
instances:
## @param host - string - required
## Enter the host to connect to.
#
- host: '%%host%%'
## @param port - integer - required
## Enter the port of the host to connect to.
#
port: 6379
이것밖에 없는게 아닌가..! 그래서 이걸 내가 만든 파일로 대체할 수 있을지 ai에게 다시 확인하고, 나는 terraform으로 helm_release를 사용하고 있었기 때문에
yamlencode({
datadog = {
confd = {
"redisdb.yaml" = yamlencode({
init_config = {}
instances = [
{
host = "argo-cd-redis-ha"
port = 6379
password = "%%env_REDIS_PASSWORD%%"
}
]
})
}
}
이렇게 적용하고, datadog agent pod에 들어가니 위의 에러가 더 이상 뜨지 않고 잘 연결되는 것을 확인할 수 있었다.
이번에 디버깅을 하면서 하도 해결이 되지 않아 구글링을 했을 때도 이런 비슷한 문제를 가진 사람들이 크게 신경쓸 일이 아니다라고 말하는걸 보고 그냥 포기할까 싶기도 했다. 너무 답답했고, 기한을 지키지 못할까 걱정이 됐다. 하지만 ai도 해결하지 못하는 이 문제를 내가 해결하면 너무나!! 뿌듯할 것 같아서 못할 건 없다라는 생각으로 끊임없이 도전했다. 결론적으로 문제를 너무 깨끗하게 해결했고, datadog monitoring site에서도

이렇게 예쁜 초록, 파란색만 볼 수 있어서 행복했다.
cursor, gemini, claude 도 해결못했는데 내가 했다~~~ 야호~