Search
Duplicate
📝

[Devops Study] 08-2. 자율배포 - 모니터링 및 알림

상태
완료
수업
Devops Study
주제
연관 노트
3 more properties
참고

모니터링

NOTE
Springboot Actuator을 활용한 JVM을 모니터링한다!
implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus'
Groovy
복사
gradle 추가
management: endpoints: web: exposure: include: "*" # *으로 표기하면 전체
YAML
복사
설정추가 (이렇게 해야 모든 액츄에이터 확인이 가능하다.)

Prometheus & Grafana 연동

NOTE
version: '3' services: grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" volumes: - ./grafana/volume:/var/lib/grafana networks: - br_app prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus/config:/etc/prometheus - ./prometheus/volume:/prometheus restart: - always networks: - br_app volumes: grafana-data: networks: br_app: external: true
YAML
복사
grafana & prometheus 설치

Portainer를 활용해서 서버의 컨테이너 확인

NOTE
portainer를 활용해 여러대의 서버에 대한 컨테이너를 확인할 수 있다.
- name: Update Docker service configuration file ansible.builtin.lineinfile: path: /lib/systemd/system/docker.service regexp: "^ExecStart=" line: "ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375" become: yes
Bash
복사
ansible에서 각 서버에 대해 docker api를 활성화하기 위해 2375port를 오픈한다.

주의점!

2375port에 대해서 모든 ip허용을 하면, 외부에서 악성 컨테이너가 설치되 좀비서버가 될 가능성이 있다!
실제로 당했으므로 주의해서 CIDR을 적용할것

Cloudwatch + Grafana 연동

NOTE
DataSource에서 CloudWatch 선택!
IAM의 공개키, 비밀키, 지역을 입력한다!
다음과 같이 AWS EC2의 정보를 가져올 수 있다!

Cloudwatch + Discord 알람

NOTE
테라폼으로 CloudWatch에서 각 인스턴스 CPU 75이상일시 경고알람
Amazon SNS를 이용한 Discord등록
import json import os import requests def lambda_handler(event, context): discord_webhook_url = 'https://discordapp.com/api/webhooks/1102766108425072671/-UyXPmGshE1Mju6WD6Rj9evO4tKsvyBzOTkF7Qc5FwKZ4fjAKG5tqkIWtY2BPCOJ0c5Z' message_json = json.loads(event['Records'][0]['Sns']['Message']) # 코드 블록 형식으로 메시지를 보낼 수 있도록 문자열에 추가 formatted_message = f""" 내용 : {message_json.get('AlarmDescription')} 시간 : {message_json.get('StateChangeTime')} """ # Discord 임베드 생성 embed = { "title": f"{message_json.get('AlarmName')}", "description": formatted_message, "color": 16711680 # 0x00FFFF에 해당하는 10진수 값. 이 값을 변경하여 다른 색상을 사용할 수 있습니다. } data = { 'embeds': [embed] # 임베드 리스트를 data 딕셔너리에 추가 } requests.post(discord_webhook_url, data=json.dumps(data), headers={"Content-Type": "application/json"})
Python
복사
Cloudwatch에서 경보가 발생하면 Lamda를 동작시켜 Amazon SNS에 등록된 디스코드로 알람을보낸다!
디스코드로 알람이옴!

참고! (디스코드 채팅양식)