Apache ActiveMQ

이 문서에서는 Google Cloud Managed Service for Prometheus를 사용하여 Apache ActiveMQ에서 측정항목을 수집할 수 있도록 Google Kubernetes Engine 배포를 구성하는 방법을 설명합니다. 이 문서에서는 다음을 수행하는 방법을 보여줍니다.

  • 측정항목을 보고하도록 ActiveMQ용 내보내기 도구를 설정합니다.
  • 내보낸 측정항목을 수집하도록 Managed Service for Prometheus의 PodMonitoring 리소스를 구성합니다.
  • 측정항목을 보도록 Cloud Monitoring의 대시보드에 액세스합니다.
  • 측정항목을 모니터링하도록 알림 규칙을 구성합니다.

이 안내는 관리형 컬렉션을 Managed Service for Prometheus와 함께 사용하는 경우에만 적용됩니다. 자체 배포 컬렉션을 사용하는 경우 JMX 내보내기 도구용 소스 저장소에서 설치 정보를 참조하세요.

이 안내는 예시로서 제공되며 대부분의 Kubernetes 환경에서 작동합니다. 제한적인 보안 또는 조직 정책으로 인해 애플리케이션 또는 내보내기 도구를 설치하는 데 문제가 있으면 지원을 위한 오픈소스 문서를 참조하는 것이 좋습니다.

ActiveMQ에 대한 자세한 내용은 ActiveMQ를 참조하세요.

기본 요건

Managed Service for Prometheus 및 관리형 컬렉션을 사용하여 ActiveMQ에서 측정항목을 수집하려면 배포가 다음 요구사항을 충족해야 합니다.

  • 클러스터가 Google Kubernetes Engine 버전 1.21.4-gke.300 이상을 실행 중이어야 합니다.
  • 관리형 컬렉션이 사용 설정된 상태에서 Managed Service for Prometheus를 실행 중이어야 합니다. 자세한 내용은 관리형 컬렉션 시작하기를 참조하세요.

  • Cloud Monitoring에서 사용할 수 있는 대시보드를 ActiveMQ 통합에 사용하려면 jmx-exporter 버전 0.17.0 이상을 사용해야 합니다.

    사용 가능한 대시보드에 대한 자세한 내용은 대시보드 보기를 참조하세요.

ACTIVEMQ_JMXACTIVEMQ_OPTS 환경 변수를 설정하여 JMX에 ActiveMQ 브로커를 구성할 수 있습니다.

ActiveMQ 내보내기 설치

ActiveMQ 워크로드에 대한 사이드카로 ActiveMQ 내보내기 도구 jmx-exporter를 설치하는 것이 좋습니다. 사이드카 사용에 대한 자세한 내용은 다중 컨테이너 포드가 있는 Kubernetes의 확장 애플리케이션을 참조하세요.

jmx-exporter를 ActiveMQ에 대한 사이드카로 설치하려면 다음 예시와 같이 ActiveMQ 구성을 수정합니다.

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ConfigMap
metadata:
  name: activemq-exporter
data:
  config.yaml: |
    hostPort: localhost:1099
    lowercaseOutputName: true
    lowercaseOutputLabelNames: true
    blacklistObjectNames:
      - "org.apache.activemq:clientId=*,*"
    whitelistObjectNames:
      - "org.apache.activemq:destinationType=Queue,*"
      - "org.apache.activemq:destinationType=Topic,*"
      - "org.apache.activemq:type=Broker,brokerName=*"
      - "org.apache.activemq:type=Topic,brokerName=*"

    rules:
    - pattern: org.apache.activemq<type=Broker, brokerName=(\S*), destinationType=Queue, destinationName=(\S*)><>(\w+)
      name: activemq_queue_$3
      attrNameSnakeCase: true
      labels:
        destination: $2

    - pattern: org.apache.activemq<type=Broker, brokerName=(\S*), destinationType=Topic, destinationName=(\S*)><>(\w+)
      name: activemq_topic_$3
      attrNameSnakeCase: true
      labels:
        destination: $2

    - pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>CurrentConnectionsCount
      name: activemq_connections
      type: GAUGE

    - pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>Total(.*)Count
      name: activemq_$2_total
      type: COUNTER

    - pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>(.*)PercentUsage
      name: activemq_$2_usage_ratio
      type: GAUGE
      valueFactor: 0.01
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: activemq
spec:
  selector:
    matchLabels:
+     app.kubernetes.io/name: activemq
  template:
    metadata:
      labels:
+       app.kubernetes.io/name: activemq
    spec:
      containers:
      - name: activemq
        image: rmohr/activemq:5.15.9-alpine
+       ports:
+         - containerPort: 1099
+           name: jmx
+       env:
+         - name: ACTIVEMQ_JMX
+           value: "1099"
+         - name: ACTIVEMQ_OPTS
+           value: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
+     - name: exporter
+       image: bitnami/jmx-exporter:0.17.0
+       command:
+         - java
+         - -jar
+         - jmx_prometheus_httpserver.jar
+       args:
+         - "9000"
+         - config.yaml
+       ports:
+       - containerPort: 9000
+         name: prometheus
+       volumeMounts:
+       - mountPath: /opt/bitnami/jmx-exporter/config.yaml
+         subPath: config.yaml
+         name: activemq-exporter
+     volumes:
+     - name: activemq-exporter
+       configMap:
+         name: activemq-exporter
+         items:
+         - key: config.yaml
+           path: config.yaml

+ 기호로 시작하는 모든 줄을 구성에 추가해야 합니다.

로컬 파일에서 구성 변경사항을 적용하려면 다음 명령어를 실행합니다.

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Terraform을 사용하여 구성을 관리할 수도 있습니다.

PodMonitoring 리소스 정의

대상 검색을 위해 Managed Service for Prometheus 연산자에는 동일한 네임스페이스의 ActiveMQ 내보내기 도구에 해당하는 PodMonitoring 리소스가 필요합니다.

다음 PodMonitoring 구성을 사용할 수 있습니다.

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: activemq
  labels:
    app.kubernetes.io/name: activemq
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: activemq

라벨 선택기 및 포트가 ActiveMQ 내보내기 도구 설치에 사용된 선택기 및 포트와 일치하는지 확인합니다.

로컬 파일에서 구성 변경사항을 적용하려면 다음 명령어를 실행합니다.

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Terraform을 사용하여 구성을 관리할 수도 있습니다.

규칙 및 알림 정의

다음 Rules 구성을 사용하여 ActiveMQ 측정항목에 대한 알림을 정의할 수 있습니다.

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  name: activemq-rules
  labels:
    app.kubernetes.io/component: rules
    app.kubernetes.io/name: activemq-rules
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  groups:
  - name: activemq
    interval: 30s
    rules:
    - alert: ActiveMQNoConnections
      annotations:
        description: |-
          ActiveMQ no connections
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: ActiveMQ down (instance {{ $labels.instance }})
      expr: activemq_connections_total{job="activemq"} == 0
      for: 5m
      labels:
        severity: warning
    - alert: ActiveMQHighStoreUsage
      annotations:
        description: |-
          ActiveMQ high store usage
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: ActiveMQ high store usage (instance {{ $labels.instance }})
      expr: activemq_store_usage_ratio{job="activemq"} > 0.9
      for: 5m
      labels:
        severity: warning
    - alert: ActiveMQHighTempStoreUsage
      annotations:
        description: |-
          ActiveMQ high temp store usage
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: ActiveMQ high temp store usage (instance {{ $labels.instance }})
      expr: activemq_temp_usage_ratio{job="activemq"} > 0.9
      for: 5m
      labels:
        severity: warning

로컬 파일에서 구성 변경사항을 적용하려면 다음 명령어를 실행합니다.

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Terraform을 사용하여 구성을 관리할 수도 있습니다.

클러스터에 규칙을 적용하는 방법에 대한 자세한 내용은 관리형 규칙 평가 및 알림을 참조하세요.

구성 확인

측정항목 탐색기를 사용하여 ActiveMQ 내보내기 도구를 올바르게 구성했는지 확인할 수 있습니다. Cloud Monitoring이 측정항목을 수집하는 데 1~2분 정도 걸릴 수 있습니다.

측정항목이 수집되었는지 확인하려면 다음을 수행하세요.

  1. Google Cloud 콘솔에서  측정항목 탐색기 페이지로 이동합니다.

    측정항목 탐색기로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Monitoring인 결과를 선택합니다.

  2. 쿼리 빌더 창의 툴바에서 이름이  MQL 또는  MQL인 버튼을 선택합니다.
  3. PromQL 전환 버튼에 PromQL이 선택되어 있는지 확인합니다. 언어 전환 버튼은 쿼리 형식을 지정할 수 있는 동일한 툴바에 있습니다.
  4. 다음 쿼리를 입력하고 실행합니다.
    up{job="activemq", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

대시보드 보기

Cloud Monitoring 통합에는 ActiveMQ Prometheus 개요 대시보드가 포함됩니다. 대시보드는 통합을 구성할 때 자동으로 설치됩니다. 통합을 설치하지 않고도 대시보드의 정적 미리보기를 볼 수 있습니다.

설치된 대시보드를 보려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서  대시보드 페이지로 이동합니다.

    대시보드로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Monitoring인 결과를 선택합니다.

  2. 대시보드 목록 탭을 선택합니다.
  3. 통합 카테고리를 선택합니다.
  4. 대시보드의 이름을 클릭합니다(예: ActiveMQ Prometheus 개요).

대시보드의 정적 미리보기를 보려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서  통합 페이지로 이동합니다.

    통합으로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Monitoring인 결과를 선택합니다.

  2. Kubernetes Engine 배포 플랫폼 필터를 클릭합니다.
  3. Apache ActiveMQ 통합을 찾고 세부정보 보기를 클릭합니다.
  4. 대시보드 탭을 선택합니다.

문제 해결

측정항목 수집 문제 해결에 대한 자세한 내용은 수집 측 문제 해결에서 내보내기 도구의 수집 관련 문제를 참조하세요.