레이블이 yq인 게시물을 표시합니다. 모든 게시물 표시
레이블이 yq인 게시물을 표시합니다. 모든 게시물 표시

Prometheus ServiceMonitor

# 사용자가 만든 api 가 prometheus 데이터 포맷(시계열 데이터...)으로 응답할때
# 이 응답을 주기적으로 prometheus 에서 수집하기 위해 monitoring.coreos.com 의 ServiceMonitor 리소스를 생성한다.

# 사용자 api 서버에 대한 Service 리소스
apiVersion: v1
kind: Service
metadata:
  labels:
    app: ysoftman-server
    release: prometheus-monitor
  name: ysoftman-server
  namespace: ysoftman-server
spec:
  ports:
    - name: metrics
      port: 80
      protocol: TCP
      targetPort: 8080
  selector:
    app: ysoftman-server

---
# ServiceMonitor 리소스 생성
# 위 Service 에 대해 주기적으로 요청해 prometheus 로 수집한다.
# ServiceMonitor 가 정상적으로 등록되면 prometheus에서 메트릭이 수집되고, tagets 에 추가한 api 를 확인할 수 있다.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: prometheus-monitor-ysoftman-exporter
    # prometheus 오브젝트의 다음 값이 'release: prometheus-monitor' 로 되어 있고
    # matchLabels 에 명시해야 이 ServiceMonitor 가 prometheus target 으로 추가된다.
    # kubectl get prometheus -n prometheus-monitor prometheus-monitor -o yaml | yq '.spec.serviceMonitorSelector'
    release: prometheus-monitor
  name: prometheus-monitor-ysoftman-exporter
  namespace: prometheus-monitor
spec:
  namespaceSelector:
    # 모든 namespace 에서 대상(수집,모니터링)할 service 찾는다.
    # any: true
    # namespace 가 ysoftman-server 인곳에서 대상(수집,모니터링)할 service 를 찾는다.
    matchNames:
      - ysoftman-server
  selector:
    matchLabels:
      # 다음 label(key,value)가 명시된 Service 를 선택한다.
      app: ysoftman-server
      release: prometheus-monitor
  endpoints:
      # Service 요청할 path
    - path: /metrics
      # Service port name 명시
      port: metrics

yq command

# YAML 처리기 yq 사용 예시

# 우선 테스트를 위한 샘플 yaml 파일 생성(주의: 들여쓰기 2칸이어야 함)
rm -f test.yaml
cat << zzz > test.yaml 
contents:
- data:
    id: "apple"
    value: 100
  name: my1
- data:
    name: "lemon"
    value: 200
  name: my2
current: my2
zzz

# yq 로 보기
cat test.yaml | yq
# 또는
yq test.yaml

# current 값보기
cat test.yaml | yq '.current'

# contents > 0번째 원소 보기
cat test.yaml | yq '.contents.[0]'

# contents 원소들중 name == my 로 시작하는 원소들 보기
cat test.yaml | yq '.contents.[] | select(.name == "my*")'

# contents 원소들중 name == my1 인 것의 data > id 보기
cat test.yaml | yq '.contents.[] | select(.name == "my1") | .data.id
# 또는
cat test.yaml | yq '.contents.[] | select(.name == "my1").data.id