12 監視および視覚化ソフトウェアのインストール
この章の内容は次のとおりです。
- ロギングおよび視覚化ソフトウェアのインストール
Elasticsearchを使用すると、システム上の様々な製品のログを集約できます。ログを分析し、Kibanaコンソールを使用して、チャートやグラフの形式でデータを視覚化できます。Elasticsearchでは、集中管理型のElasticsearchデプロイメントへの接続にAPIキーを使用するというベスト・プラクティスが推奨されています。 - 監視ソフトウェアのインストール
PrometheusとGrafanaは、環境の監視に役立ちます。この章で説明する手順は、kube-prometheus
インストーラを使用したシンプルなデプロイメント用です。
上位トピック: 「エンタープライズ・ドメインの構成」
ロギングおよび可視化ソフトウェアのインストール
この項には次のトピックが含まれます:
- Kubernetesサービス
Kubernetesサービスは、監視および視覚化のデプロイメント・プロセスの一環として作成されます。 - この項で使用する変数
この項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。 - 前提条件
最新リリースのElasticsearchでは、Elasticsearch Operatorが使用されます。Elasticsearch Operatorは、Kubernetesステートフル・セットを使用してエラスティック・クラスタをデプロイします。ステートフル・セットにより、動的な永続ボリュームが作成されます。 - Elasticsearch (ELK)スタックおよびKibanaのインストール
この手順は、シンプルなELKクラスタのデプロイに役立ちます。テストを目的とする場合には十分です。本番環境では、ベンダーから適切なライセンスを取得する必要があります。
親トピック: 監視および視覚化ソフトウェアのインストール
Kubernetesサービス
Kubernetesサービスは、監視および視覚化のデプロイメント・プロセスの一環として作成されます。
表12-1 Kubernetesサービス
サービス名 | タイプ | サービス・ポート | マップ済ポート |
---|---|---|---|
|
ClusterIP |
9600 |
|
|
NodePort |
31800 |
6501 |
|
NodePort |
31920 |
9200 |
ノート:
マップ済ポートは、インストール時にランダムに割り当てられます。この表に記載されている値は例にすぎません。親トピック: ロギングおよび視覚化ソフトウェアのインストール
この項で使用する変数
この項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。
変数の形式は<VARIABLE_NAME>です。次の表に、これらの各変数に設定する必要がある値を示します。
表12-2 変数のリスト
変数 | サンプル値 | 説明 |
---|---|---|
<ELKNS> |
|
Elasticsearchネームスペースの名前。 |
<ELK_OPER_VER> |
|
Elasticsearch Operatorのバージョン。 |
<ELK_VER> |
|
インストールするElasticsearch/Kibanaのバージョン。 |
<ELK_USER> |
|
Elasticsearchにアクセスするlogstashのユーザーの名前。 |
<ELK_PASSWORD> |
< |
ELK_USERのパスワード。 |
<ELK_K8> |
|
外部からのElasticsearchへのアクセスに使用するKubernetesポート。 |
<ELK_KIBANA_K8> |
|
外部からのKibanaへのアクセスに使用するKubernetesポート。 |
<DH_USER> |
|
Docker Hubのユーザー名。 |
<DH_PWD> |
|
Docker Hubのパスワード。 |
<PV_SERVER> |
|
NFSサーバーの名前。 ノート: この名前は、Kubernetesクラスタ内で解決可能である必要があります。 |
<ELK_SHARE> |
|
ELK永続ボリュームのNFSマウント・ポイント。 |
親トピック: ロギングおよび視覚化ソフトウェアのインストール
前提条件
最新リリースのElasticsearchでは、Elasticsearch Operatorが使用されます。Elasticsearch Operatorは、Kubernetesステートフル・セットを使用してエラスティック・クラスタをデプロイします。ステートフル・セットにより、動的な永続ボリュームが作成されます。
Elasticsearchをインストールする前に、動的ストレージを許可する環境に、デフォルトのKubernetesストレージ・クラスが定義されていることを確認してください。各ベンダーには独自のストレージ・プロバイダがありますが、ストレージを動的に割り当てられるように構成されていない場合があります。
kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
oci (default) kubernetes.io/is-default-class Delete Immediate false 6d21h
ストレージを動的に作成できるストレージ・プロバイダがない場合は、NFS subdir外部プロビジョナなど、外部のNFSストレージ・プロバイダを使用できます。
ストレージ・クラスの詳細は、「Storage Classes」を参照してください。
NFS subdir外部プロビジョナの詳細は、Kubernetes NFS Subdir外部プロビジョナを参照してください。
完全を期すため、次のステップでは、NFS subdirを使用してElasticsearchおよびKibanaをインストールする方法を示します:
ELKデータ用のファイルシステムの作成
NFSクライアントをデプロイする前に、ELKデータを格納するためのNFSストレージにマウント・ポイント/エクスポートを作成する必要があります。このマウント・ポイントは、NFS subdir外部プロバイダによって使用されます。
親トピック: 前提条件
Elasticsearch (ELK)スタックおよびKibanaのインストール
本番セキュリティの設定は、「Configure Security for the Elastic Stack」を参照してください。
この項には次のトピックが含まれます:
- 製品固有の作業ディレクトリの設定
インストールを開始する前に、ELKコンテナ・イメージをダウンロードしてステージングしておくか、Oracle Container Registryおよびコード・リポジトリを使用している必要があります。 - Kubernetesネームスペースの作成
- Docker HubイメージのKubernetesシークレットの作成
- Elasticsearch Operatorのインストール
- Elasticsearchクラスタの作成
- Kibanaクラスタの作成
- Kubernetesサービスの作成
- Logstashへのアクセス権の付与
- Kibanaコンソールへのアクセス
- Kibana索引の作成
親トピック: ロギングおよび視覚化ソフトウェアのインストール
製品固有の作業ディレクトリの設定
インストールを開始する前に、ELKコンテナ・イメージをダウンロードしてステージングしておくか、Oracle Container Registryおよびコード・リポジトリを使用している必要があります。
「エンタープライズ・デプロイメント用のソフトウェア・ディストリビューションの特定と取得」を参照してください。この項では、ダウンロードしたサンプル・デプロイメント・スクリプトをELKの一時作業ディレクトリにコピーする手順について説明します。
Kubernetesネームスペースの作成
Kubernetesネームスペースは、Elasticsearchスタックの格納に使用されます。
次のコマンドを使用して、ELKのネームスペースを作成します:
kubectl create namespace <ELKNS>
kubectl create namespace elkns
Docker HubイメージのKubernetesシークレットの作成
このシークレットを使用すると、KubernetesはElasticsearchイメージを含むhub.docker.com
からイメージをプルできます。
hub.docker.com
にアカウントが必要です。
次のコマンドを使用して、hub.docker.com
のKubernetesシークレットを作成します:
kubectl create secret docker-registry dockercred --docker-server="https://index.docker.io/v1/" --docker-username="<DH_USER>" --docker-password="<DH_PWD>" --namespace=<ELKNS>
kubectl create secret docker-registry dockercred --docker-server="https://index.docker.io/v1/" --docker-username="username" --docker-password="mypassword" --namespace=elkns
kubectl create secret -n <ELKNS> docker-registry <REGISTRY_SECRET_NAME> --docker-server=<REGISTRY_ADDRESS> --docker-username=<REG_USER> --docker-password=<REG_PWD>
kubectl create secret -n elkns docker-registry regcred --docker-server=iad.ocir.io/mytenancy --docker-username=mytenancy/oracleidentitycloudservice/myemail@email.com --docker-password=<password>
Elasticsearchクラスタの作成
Elasticsearch Operatorを使用してElasticsearchクラスタを作成するには、次のステップを実行します:
Elasticsearch証明書のコピー
Logstashでは、Elasticsearch CA (認証局)証明書にアクセスして、Elasticsearchサーバーに接続する必要があります。Logstashでは、Logstashが実行される各ネームスペースにロードされた構成マップに証明書のコピーが配置されます。
本番環境では、本番証明書を使用することをお薦めします。ただし、Elasticsearchによる自己署名証明書の作成を許可している場合は、後からアクセスしやすいように、この証明書を作業ディレクトリにコピーしてください。
自己署名証明書は、次のコマンドで作業ディレクトリにコピーします:
kubectl cp <ELKNS>/elasticsearch-es-default-0:/usr/share/elasticsearch/config/http-certs/..data/ca.crt <WORKDIR>/ELK/elk.crt
kubectl cp elkns/elasticsearch-es-default-0:/usr/share/elasticsearch/config/http-certs/..data/ca.crt /workdir/ELK/elk.crt
親トピック: Elasticsearchクラスタの作成
Elasticsearchのアクセスの詳細
クラスタが起動したら、クラスタとの対話に次の情報が必要になります:
親トピック: Elasticsearchクラスタの作成
資格証明
elastic
というユーザーが作成されます。次のコマンドを使用すると、ユーザーelastic
のパスワードを取得できます:kubectl get secret elasticsearch-es-elastic-user -n <ELKNS> -o go-template='{{.data.elastic | base64decode}}'
kubectl get secret elasticsearch-es-elastic-user -n elkns -o go-template='{{.data.elastic | base64decode}}'
親トピック: Elasticsearchのアクセスの詳細
URL
ログを送信するためのURLは、次のコマンドで確認できます:
https://elasticsearch-es-http.<ELKNS>.svc.cluster.local:9200/
https://elasticsearch-es-http.elkns.svc.cluster.local:9200/
親トピック: Elasticsearchのアクセスの詳細
Kibanaクラスタの作成
Kibanaクラスタを作成するには、次のステップを実行します:
構成ファイルの作成
<WORKDIR>/ELK/kibana.yaml
という構成ファイルを、次の内容で作成します:apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: kibana
namespace: <ELKNS>
spec:
version: <ELK_VER>
count: 1
elasticsearchRef:
name: elasticsearch
ノート:
独自のコンテナ・レジストリを使用している場合は、前述の内容に次の行を追加する必要があります:spec:
image: iad.ocir.io/mytenancy/idm/kibana/kibana:<ELK_VER>
podTemplate:
spec:
imagePullSecrets:
- name: regcred
親トピック: Kibanaクラスタの作成
Kubernetesサービスの作成
イングレス・コントローラを使用している場合は、イングレス経由でサービスを公開できます。ただし、イングレス・ログ・ファイルをElasticsearchに送信する場合は、相互に依存しないようにしてください。
ElasticsearchおよびKibanaにアクセスするには、2つのNodePortサービスを作成する必要があります。
- 外部Elasticsearchとやり取りするためのNodePortサービス。たとえば、クラスタ外のソースからのログの送信や、ELKクラスタへのAPIコールの実行です。
- もう1つは、Kibanaコンソールへのアクセス用です。
Kibana用のNodePortサービスの作成
親トピック: Kubernetesサービスの作成
Elasticsearch用のNodePortサービスの作成
親トピック: Kubernetesサービスの作成
Logstashへのアクセス権の付与
本番デプロイメントでは、Elasticsearchセキュリティが有効になっています。セキュリティには、LogstashとElasticsearchの間のSSL通信と、アクセスするためのAPIキーまたはユーザー名とパスワードの組合せという2つの部分があります。
Logstash用のロールおよびユーザーの作成
ノート:
Elasticsearchでは、ユーザー名とパスワードではなく、APIキーの使用をお薦めします。詳細は、https://www.elastic.coを参照してください。このために、専用のロールとユーザーを作成することをお薦めします。
elastic
をエンコードする必要があります。次のコマンドで、ユーザーelastic
をエンコードします:echo -n elastic:<ELASTIC PASSWORD> | base64
elastic
ユーザーのパスワードの取得は、「資格証明」を参照してください。
親トピック: Logstashへのアクセス権の付与
Logstash用のAPIキーの作成
Elasticsearchでは、APIキーを使用してElasticsearchにアクセスすることをお薦めします。コマンド・ライン・オプションを使用してAPIキーを作成するには:
親トピック: Logstashへのアクセス権の付与
Kibanaコンソールへのアクセス
http://k8workers.example.com:30094/app/kibana
elastic
です。パスワードを取得するには、次のコマンドを使用します:kubectl get secret elasticsearch-es-elastic-user -n $ELKNS -o go-template='{{.data.elastic | base64decode}}'
監視ソフトウェアのインストール
kube-prometheus
インストーラを使用したシンプルなデプロイメント用です。「kube-prometheus」を参照してください。Prometheus製品の詳細は、「Prometheus」を参照してください。
インストール・プロセスを開始する前に、ご使用のKubernetesリリースでサポートされているバージョンのPrometheusであることを確認してください。「Prometheus/Kubernetes compatibility matrix」を参照してください。
この項には次のトピックが含まれます:
- Kubernetesサービス
- この項で使用する変数
この項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。 - PrometheusおよびGrafanaのインストール
監視データをPrometheusやGrafanaに送信する方法は、各製品の章で説明します。この項では、PrometheusおよびGrafanaソフトウェアのインストール方法について説明します。 - Grafanaダッシュボードについて
親トピック: 監視および視覚化ソフトウェアのインストール
Kubernetesサービス
インストールの一環として作成されるKubernetesサービスは次のとおりです:
サービス名 | タイプ | サービス・ポート | マップ済ポート |
---|---|---|---|
|
NodePort |
32101 |
9090 |
|
NodePort |
32100 |
3000 |
|
NodePort |
32102 |
9093 |
親トピック: 監視ソフトウェアのインストール
この項で使用する変数
この項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。
変数の形式は<VARIABLE_NAME>です。次の表に、これらの各変数に設定する必要がある値を示します。
表12-3 変数のリスト
変数 | サンプル値 | 説明 |
---|---|---|
<PROMNS> |
|
デプロイメントに使用するKubernetesネームスペースの名前。 |
<PROM_GRAF_K8> |
|
外部からGrafanaへのアクセスに使用するKubernetesポート。 |
<PROM _K8> |
|
外部からPrometheusへのアクセスに使用するKubernetesポート。 |
<PROM_ALERT_K8> |
< |
外部からアラート・マネージャへのアクセスに使用するKubernetesポート。 |
親トピック: 監視ソフトウェアのインストール
PrometheusおよびGrafanaのインストール
監視データをPrometheusやGrafanaに送信する方法は、各製品の章で説明します。この項では、PrometheusおよびGrafanaソフトウェアのインストール方法について説明します。
インストールには次のステップがあります。
- 製品固有の作業ディレクトリの設定
- Prometheusインストーラのダウンロード
- Kubernetesネームスペースの作成
- Helmオーバーライド・ファイルの作成
- PrometheusおよびGrafanaのデプロイ
- インストールの検証
親トピック: 監視ソフトウェアのインストール
製品固有の作業ディレクトリの設定
この項では、ダウンロードしたサンプルのデプロイメント・スクリプトをPrometheusの一時作業ディレクトリにコピーする手順について説明します。
ノート:
このガイドでは、複数の製品で同じサンプル・ファイル・セットが使用されています。毎回ダウンロードする必要がないように、ファイルは製品固有でない作業ディレクトリにステージングされます。親トピック: PrometheusおよびGrafanaのインストール
Prometheusインストーラのダウンロード
親トピック: PrometheusおよびGrafanaのインストール
Kubernetesネームスペースの作成
ネームスペースを作成するには、次のコマンドを実行します:
kubectl create namespace monitoring
出力が次のように表示されます。
namespace/monitoring created
親トピック: PrometheusおよびGrafanaのインストール
Helmオーバーライド・ファイルの作成
<WORKDIR>/override_prom.yaml
というhelmオーバーライド・ファイルを作成して、デプロイメントの作成方法を決定します。このファイルの内容は次のとおりです。alertmanager:
service:
nodePort: <PROM_ALERT_K8>
type: NodePort
prometheus:
image:
tag: <IMAGE_VER>
service:
nodePort: <PROM_K8>
type: NodePort
grafana:
image:
tag: <IMAGE_VER>
service:
nodePort: <PROM_GRAF_K8>
type: NodePort
adminPassword: <PROM_ADMIN_PWD>
この例ではNodePortサービスを使用していますが、これは、Prometheusではイングレスの監視が可能で、イングレスに関連する問題でPrometheusへのアクセスが妨げられないようにするためです。したがって、NodePortでスタンドアロンの状態にします。
ノート:
docker.io
以外のリポジトリからイメージをプルする場合は、ファイルの先頭に次のエントリを追加します:global:
imageRegistry: <REPOSITORY>
global:
ImageRegistry: iad.ocir.io/mytenancy/idm
親トピック: PrometheusおよびGrafanaのインストール
PrometheusおよびGrafanaのデプロイ
親トピック: PrometheusおよびGrafanaのインストール
インストールの検証
kubectl get all -n monitoring
NAME READY STATUS RESTARTS AGE
pod/alertmanager-kube-prometheus-kube-prome-alertmanager-0 2/2 Running 0 15h
pod/kube-prometheus-grafana-95944596-kcd9k 3/3 Running 0 15h
pod/kube-prometheus-kube-prome-operator-84c5bc5876-klvrs 1/1 Running 0 15h
pod/kube-prometheus-kube-state-metrics-5f9b85478f-qtwnz 1/1 Running 0 15h
pod/kube-prometheus-prometheus-node-exporter-9h86g 1/1 Running 0 15h
pod/kube-prometheus-prometheus-node-exporter-gbkgb 1/1 Running 0 15h
pod/kube-prometheus-prometheus-node-exporter-l99sb 1/1 Running 0 15h
pod/kube-prometheus-prometheus-node-exporter-r7d77 1/1 Running 0 15h
pod/kube-prometheus-prometheus-node-exporter-rnq42 1/1 Running 0 15h
pod/prometheus-kube-prometheus-kube-prome-prometheus-0 2/2 Running 0 15h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 15h
service/kube-prometheus-grafana NodePort 10.97.137.130 <none> 80:30900/TCP 15h
service/kube-prometheus-kube-prome-alertmanager NodePort 10.97.153.100 <none> 9093:30903/TCP 15h
service/kube-prometheus-kube-prome-operator ClusterIP 10.108.174.205 <none> 443/TCP 15h
service/kube-prometheus-kube-prome-prometheus NodePort 10.110.156.35 <none> 9090:30901/TCP 15h
service/kube-prometheus-kube-state-metrics ClusterIP 10.96.233.108 <none> 8080/TCP 15h
service/kube-prometheus-prometheus-node-exporter ClusterIP 10.107.188.115 <none> 9100/TCP 15h
service/prometheus-operated ClusterIP None <none> 9090/TCP 15h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/kube-prometheus-prometheus-node-exporter 5 5 5 5 5 <none> 15h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kube-prometheus-grafana 1/1 1 1 15h
deployment.apps/kube-prometheus-kube-prome-operator 1/1 1 1 15h
deployment.apps/kube-prometheus-kube-state-metrics 1/1 1 1 15h
NAME DESIRED CURRENT READY AGE
replicaset.apps/kube-prometheus-grafana-95944596 1 1 1 15h
replicaset.apps/kube-prometheus-kube-prome-operator-84c5bc5876 1 1 1 15h
replicaset.apps/kube-prometheus-kube-state-metrics-5f9b85478f 1 1 1 15h
NAME READY AGE
statefulset.apps/alertmanager-kube-prometheus-kube-prome-alertmanager 1/1 15h
statefulset.apps/prometheus-kube-prometheus-kube-prome-prometheus 1/1 15h
親トピック: PrometheusおよびGrafanaのインストール
Grafanaダッシュボードについて
Grafanaダッシュボードは、ターゲットの情報を視覚化するために使用されます。製品ごとに異なるタイプのダッシュボードがあります。ダッシュボードをインストールして、Kubernetes環境を監視してください。
Oracle Identity Managementデプロイメントに関連するダッシュボードは、次のとおりです:
表12-4 Oracle Identity Managementデプロイメントに関連するダッシュボード
ダッシュボード | 場所 | 説明 |
---|---|---|
Kubernetes |
Kubernetesクラスタの監視に使用します。 |
|
Nginx |
https://grafana.com/grafana/dashboards/9614-nginx-ingress-controller/ |
イングレス・コントローラの監視に使用します。 |
WebLogic |
|
GitHubからのOracleダウンロードに含まれています。 WebLogicドメインの監視に使用します。 |
Apache |
複数のApacheダッシュボードを使用できます。これは例です。 |
|
Oracle Database |
サンプルのデータベース・ダッシュボード。 |
Grafanaダッシュボードのインストール
- GrafanaのWebサイトから、KubernetesダッシュボードのJSONファイルをダウンロードします。例: https://grafana.com/grafana/dashboards/10856。
http://<K8_WORKER1>:30900
というURLでGrafanaダッシュボードにアクセスし、admin/<PROM_ADMIN_PWD>でログインします。要求された場合はパスワードを変更します。- 画面上部の検索ボックスをクリックし、「Import New Dashboard」を選択します。
- ステップ1でダウンロードしたJSONファイルを「Upload JSON File」ボックスにドラッグするか、ボックスをクリックしてファイルを参照します。「Import」をクリックします。
- 要求された場合は、Prometheusデータ・ソースを選択します。例: Prometheus。
- 「Import」をクリックします。ダッシュボードが「Dashboards」パネルに表示されます。
親トピック: Grafanaダッシュボードについて