OpenShift 上の JBoss EAP の統計情報を Prometheus で確認する
結構苦労したのですが、自分のOpenShift local 環境で JBoss EAP の統計情報を Prometheus で確認した際の作業メモを整理します。 設定手順としての一例になるかと思いますので参考になれば幸いです。
事前準備
- 任意のプロジェクトを作成します。
oc new-project eapdemo
- テンプレートを取り込みます。
oc_project="$(oc project -q)"
for resource in \
eap74-basic-s2i.json
do
oc -n "$oc_project" create -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/templates/${resource}
done
JBoss EAP 環境の用意
- eap74-basic-s2i テンプレートを利用しながら QuickStarts の kitchensink アプリをデプロイします。(時間が掛かるので暫く待機します)
(補足)最後の2行で JBoss EAP の統計情報を取得する機能を有効にしています。この定義によって 9799 Port を用いた JMX Exporter が動作します。
oc new-app --template=eap74-basic-s2i \
-p IMAGE_STREAM_NAMESPACE=openshift \
-p SOURCE_REPOSITORY_URL="https://github.com/jboss-developer/jboss-eap-quickstarts" \
-p SOURCE_REPOSITORY_REF=openshift \
-p CONTEXT_DIR=kitchensink \
-e AB_PROMETHEUS_ENABLE=true \
-e JAVA_OPTS_APPEND=-Dwildfly.statistics-enabled=true
wildfly.statistics-enabled = true
java.class.path = /opt/eap/jboss-modules.jar:/opt/jboss/container/jolokia/jolokia.jar:/opt/jboss/container/prometheus/jmx_prometheus_javaagent.jar
- kitchensink アプリが動作することを確認します。
JBoss EAP の統計情報を監視するための設定
- 9799 ポートを利用した JMX Exporter 用 Service を登録します。
oc apply -f - << EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: monitor_sample
name: eap-app-metrics
namespace: "$oc_project"
spec:
selector:
deploymentConfig: eap-app
ports:
- name: metrics
port: 9799
protocol: TCP
targetPort: 9799
EOF
- OpenShift のモニター機能を有効にするために ConfigMap を作成します。
(補足) cluster-monitoring-config が存在しない場合は、edit の代わりに create を実行します。
oc -n openshift-monitoring edit configmap cluster-monitoring-config
- 以下のように
enableUserWorkload: true
定義を追加し、保存します。
apiVersion: v1
data:
config.yaml: |
enableUserWorkload: true
- 上記設定を実施後にモニター機能を処理する各 Pod が起動していることを確認します。
(補足)環境によって prometheus-user-workload-1 や thanos-ruler-user-workload-1 が存在することがあります。
$ oc -n openshift-user-workload-monitoring get pod
NAME READY STATUS RESTARTS AGE
prometheus-operator-c7bdc5c48-49lhp 2/2 Running 8 8d
prometheus-user-workload-0 6/6 Running 24 8d
thanos-ruler-user-workload-0 3/3 Running 22 (3h6m ago) 8d
- 利用しているユーザーへロールを付与します。
(補足)ユーザー名は適宜変更してください。
oc policy add-role-to-user monitoring-rules-view <<ユーザー名>> -n "$oc_project"
oc policy add-role-to-user monitoring-rules-edit <<ユーザー名>> -n "$oc_project"
oc policy add-role-to-user monitoring-edit <<ユーザー名>> -n "$oc_project"
- ServiceMonitor 定義を登録します。
(補足)Service 登録時に定義したラベルapp: monitor_sample
を指定し、モニター対象の Service を特定する(マッチングする)ことが重要となります。
oc apply -f - << EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: monitor
namespace: "$oc_project"
spec:
endpoints:
- port: metrics
selector:
matchLabels:
app: monitor_sample
EOF
JBoss EAP の統計情報を確認
- OpenShift の Web コンソールへログインし、Administrator パースペクティブへ切り替え、[監視] -> [ターゲット] メニューへ遷移します。
- 指定した ServiceMonitor 名と Namespace で以下のような一覧が出力されていることを確認します。(少し待機していると表示されるようになります)
http://10.xxx.xxx.xxx:9799/metrics ServiceMonitor monitor アップ Namespace eapdemo 進行中 240.5 ms
- Developer パースペクティブへ変更し、[監視] -> [メトリクス] メニューへ遷移します。
- カスタムクエリー欄へ
jboss_undertow_active_sessions
のような項目名を入力すると以下のようなグラフに表示されることを確認します。
まとめ
以上のような手順で JBoss EAP の統計情報が Prometheus で確認することができました。あとは Prometheus の使い方を覚えると良い感じで統計情報を可視化することが可能になります。