개요
쿠버네티스 환경에서 Harbor Exporter를 통해 Prometheus로 데이터를 수집하는 방법에대해 기술한다.
Harbor, Prometheus 가 설치되었다고 가정한다.
Harbor Exporter 설치
Harbor Exporter 레포지토리를 참고하여 작성하였다.
아래 파일은 c4po/harbor_exporter의 harbor-exporter.yaml에 추가로 6~8번째 줄
에 Prometheus 어노테이션을 추가하였다.
추가적으로 61번째 줄
value
에 harbor-core의 서비스 이름을 넣어줘야하고 73번째 줄
에서 HARBOR_PASSWORD
의 Secret을 만들어주거나 value로 넣어줘야한다.
마지막줄에 Harbor가 설치된 Namespace를 넣어주면 끝이난다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
---
kind: Service
apiVersion: v1
metadata:
name: harbor-exporter
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9107'
labels:
app: harbor-exporter
spec:
type: ClusterIP
ports:
- name: http
port: 9107
protocol: TCP
selector:
app: harbor-exporter
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: harbor-exporter
labels:
app: harbor-exporter
spec:
replicas: 1
selector:
matchLabels:
app: harbor-exporter
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: harbor-exporter
spec:
serviceAccountName: default
restartPolicy: Always
securityContext:
runAsNonRoot: true
runAsUser: 1000
containers:
- name: harbor-exporter
image: "c4po/harbor-exporter:debug"
imagePullPolicy: Always
# skip metrics can only provide through command line
# command:
# - /bin/harbor_exporter
# - --skip.metrics
# - "scans"
# - --skip.metrics
# - "quotas"
env:
## necessary in case you monitor multiple Harbor instances in your Prometheus
# - name: HARBOR_INSTANCE
# value: my_harbor
- name: HARBOR_URI
## name of the Service for harbor-core
value: http://harbor-core.harbor # change prefix to the name of your Helm release
## optionally use below construction to address the external endpoint of Harbor
# valueFrom:
# configMapKeyRef:
# name: prefix-harbor-core # change prefix to the name of your Helm release
# key: EXT_ENDPOINT
## uncomment if you want to use caching
# - name: HARBOR_CACHE_ENABLED
# value: "true"
# - name: HARBOR_CACHE_DURATION
# value: "20s"
- name: HARBOR_USERNAME
value: "admin"
- name: HARBOR_PASSWORD
valueFrom:
secretKeyRef:
name: harbor-core # change prefix to the name of your Helm release
key: HARBOR_ADMIN_PASSWORD
# - name: HARBOR_PASSWORD
# value: "YOUR-PASSWORD"
securityContext:
capabilities:
drop:
- SETPCAP
- MKNOD
- AUDIT_WRITE
- CHOWN
- NET_RAW
- DAC_OVERRIDE
- FOWNER
- FSETID
- KILL
- SETGID
- SETUID
- NET_BIND_SERVICE
- SYS_CHROOT
- SETFCAP
readOnlyRootFilesystem: true
resources:
limits:
cpu: 400m
memory: 256Mi
requests:
cpu: 100m
memory: 64Mi
ports:
- containerPort: 9107
name: http
livenessProbe:
httpGet:
path: /-/healthy
port: http
initialDelaySeconds: 5
timeoutSeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /-/ready
port: http
initialDelaySeconds: 1
timeoutSeconds: 5
periodSeconds: 5
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: harbor-exporter
labels:
release: mgmt
spec:
endpoints:
- interval: 10s
scrapeTimeout: 10s
honorLabels: true
port: http
path: /metrics
scheme: http
selector:
matchLabels:
app: harbor-exporter
namespaceSelector:
matchNames:
- harbor # change to the namespace where you deployed Harbor
Prometheus에서 확인 해보면 아래와같이 지표가 뜰 것이다.
Prometheus의 지표를 통해 Grafana를 사용하여 알럿이나 모니터링이 가능해졌다.
Grafana에 대시보드는 harbor-overview.json을 import 하여 사용할 수 있다.
- Grafana에서 왼쪽 + 에서 Import 클릭
- Import via panel json에서 위 파일 내용을 붙여넣어준다
- 하단에 Prometheus-mgmt에 프로메테우스 데이터소스를 선택해준다.
아래 사진과 같이 Grafana에서 Harbor의 상태를 확인 할 수 있다.