Liberty 지표를 Prometheus/Grafana에서 확인
애플리케이션 준비
샘플로서 여기 에 두고 있는 매우 간단한 Java 어플리케이션을 사용한다. Liberty 서버에서
mpMetrics-1.1
기능과 monitor-1.0
를 활성화합니다.server.xml
...
<featureManager>
...
<feature>mpMetrics-1.1</feature>
<feature>monitor-1.0</feature>
</featureManager>
...
<mpMetrics authentication="false" />
...
mpMetrics-1.1
기능을 활성화하면 /metrics
에서 메트릭 정보를 게시합니다. monitor-1.0
를 활성화하면 base
뿐만 아니라 vendor
범위 메트릭을 사용할 수 있습니다. 어떤 메트릭스를 취할 수 있는지 등은 다음 기사에도 쓰고 있으므로 그쪽을 참조.이 어플리케이션을 가동시키는 Liberty 컨테이너 이미지를
sotoiwa540/sample:1.0
로서 DockerHub에 Push 해, 이하에서는 이 이미지를 사용한다.Dockerfile
FROM websphere-liberty:18.0.0.4-webProfile8
COPY --chown=1001:0 server.xml /config/
RUN installUtility install --acceptLicense defaultServer
COPY --chown=1001:0 mysql-connector-java-8.0.13.jar /config/resources/mysql/
COPY --chown=1001:0 sample.war /config/apps/
docker build -t sotoiwa540/sample:1.0 .
docker push sotoiwa540/sample:1.0
애플리케이션 배포
배포할 Namespace를 만듭니다.
kubectl create ns liberty
매니페스트를 만들고 배포합니다.
liberty-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: liberty
spec:
selector:
matchLabels:
app: liberty
replicas: 2
template:
metadata:
labels:
app: liberty
spec:
containers:
- name: liberty
image: sotoiwa540/sample:1.0
imagePullPolicy: Always
ports:
- containerPort: 9080
kubectl apply -f liberty-deployment.yaml -n liberty
서비스 만들기
Prometheus가 Liberty의 성능 정보를 얻도록 하려면 Service 정의에 주석을 추가합니다.
liberty-service.yaml
apiVersion: v1
kind: Service
metadata:
name: liberty
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9080"
spec:
type: ClusterIP
selector:
app: liberty
ports:
- protocol: TCP
port: 9080
kubectl apply -f liberty-service.yaml -n liberty
지표 확인
Prometheus 메뉴에서 Status > Targets를 확인합니다.
kubernertes-service-endpoints에 Liberty 엔드포인트가 추가되었는지 확인합니다.
base:
또는 vendor:
를 입력하여 mpMetrics
피처 메트릭을 얻을 수 있는지 확인합니다.시도에
base:memory_used_heap_bytes
를 입력하고 Execute를 실행하여 값을 확인합니다. Liberty의 복제본 수가 2이므로 각각의 최근 데이터가 표시됩니다.Grafana에서의 표시
패널을 추가하고
base:memory_used_heap_bytes
(힙 사용량) 및 base:memory_committed_heap_bytes
(힙 크기) 쿼리를 입력합니다. base:memory_max_heap_bytes
(최대 힙 크기)도 표시해도 좋을지도 모른다. 범례는 instance
의 라벨을 표시하고 있지만, 이것은 Service의 Endpoint이며, Pod명이 아닌 것이 조금 불편할지도 모른다.다음과 같은 대시보드를 볼 수 있었다.
Pod 이름 표시
Service의 Endpoint가 아닌 Pod명을 표시하려면, Prometheus의 scrape_configs를 커스터마이즈 해, Pod명의 라벨에 붙여 줄 필요가 있다. 현재 설정은 Status > Configuration에서 확인할 수 있다.
설정은
prometheus-server
라는 ConfigMap에 저장됩니다. 커스터마이즈는 Chart의 릴리스시에 지정할 수 있다. 이미 차트를 릴리스 완료한 경우는, 차트의 파라미터를 수정해 helm upgrade
로 적용할 수가 있어, ConfigMap 를 직접 수정해도 된다.차트의 파라미터를 수정하는 경우는 디폴트의 다른 것도 포함해 쓸 필요가 있을 것 같다. 이번에는 쉽게 ConfigMap을 수정합니다.
kubectl edit cm prometheus-server -n monitoring
다음을 추가.
...
- job_name: kubernetes-service-endpoints
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
...
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: kubernetes_pod
...
라벨이 추가되었는지 확인합니다.
Grafana에서도 이 라벨을 범례로 지정한다.
Reference
이 문제에 관하여(Liberty 지표를 Prometheus/Grafana에서 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sotoiwa/items/83e5feca770fb2c28ee5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)