https://blogs.oracle.com/weblogicserver/let-weblogic-work-with-elk-in-kubernetes
過去10年間で、アプリケーションの開発、配布、展開に大きな変化があり、要件を満たすツールがますます普及してきましたが、その中にELKスタックがあります。この記事では、KubernetesでWebLogic ServerとELKスタックを統合する方法を説明します。
注:この記事のコードは以下のURLにあります。
WebLogic Server integration with ELK Stack
https://github.com/xiumliang/Weblogic-ELK
What ELK stack refers to ?
ELKスタックは、Elasticsearch、Logstash、およびKibanaで構成されています。 ELKスタックを使用すると、アプリケーションのログデータからリアルタイムで洞察を得ることができます。Elasticsearch
増大するユースケースを解決することができる、分散RESTful検索・分析エンジンです。Elastic Stackの心臓部として、データを一元的に保存して、予期したものを発見したり、予期しないものを発見することができます。
Logstash
オープンソースのサーバーサイド・データ処理パイプラインで、多数のソースからのデータを同時に取り込み、変換してお気に入りのstashに送信します。
Kibana
Elasticsearchデータを視覚化し、Elastic Stackをナビゲートできます。これにより、データを具体化する方法を自由に選択できます。お探しのものを常に知る必要はありません。
Let WebLogic work with ELK
ELKを使用してWebLogicログを収集および分析するには、いくつかの方法があります。 この記事では、2つを紹介します。Integrate ELK with WebLogic by using shared volume
Weblogic Serverはログを共有ボリュームに入れます。ボリュームは、NFSパスまたはホストパスである可能性があります。Logstashはボリュームからログを収集し、フィルタリングされたログをElasticsearchに転送します。このタイプの統合には、ログ用の共有ディスクが必要です。利点は、Weblogic ServerやELK Podがシャットダウンした後でも、ログファイルが保存され、永続化されている点です。共有ボリュームを使用すると、LogstashとElasticsearchの間のネットワーク構成を考慮する必要はありません。2つのPod (ELK、Weblogic) を配備して共有ボリュームを使用するだけで済みます。欠点は、Podの共有ボリュームをメンテナンスする必要がある点です。つまり、ディスクスペースを考慮する必要があります。マルチサーバー環境では、競合が起こらないように共有ボリュームのログを整理する必要があります。Deploy Weblogic POD to Kubernetes
この .yaml ファイルで、'hostPath' という種類の共有ボリュームを定義します。Podが起動すると、WebLogic Serverのログを共有ボリュームに書き込むので、Logstashは書き出されたログを取得できます。ボリュームタイプをNFSやその他のKubernetesでサポートしているタイプに変更できますが、パーミッションの問題に注意する必要があります。パーミッションが正しくないと、ログを共有ディスクに書き込めなかったり、読み出せなかったりします。$ kubectl create -f k8s_weblogic.yaml
続いて、Podのデプロイと起動を確認しましょう。
以下のように表示されます。$ kubectl get pods
NAME READY STATUS RESTARTS AGE ---------------------------------------------------------------------------------------------------- weblogic-1725565574-fgmsr 1/1 Running 0 31s
Deploy ELK POD to Kubernetes
K8s_elk.yaml ファイルでは、k8s_weblogic.yamlの定義と同じ共有ボリュームを定義します。WebLogic Serverと ELK Podは両方とも共有ボリュームをマウントするため、Logstashはログを読み取ることができます。$ kubectl create -f k8s_elk.yaml
Logstash起動の前に更なる設定が必要ゆえ、Pod起動時にLogstashを起動しないようにしてください。
ELK Pod の起動後、Kubernetes nodeに2個のPodが現れるはずです。
NAME READY STATUS RESTARTS AGE ---------------------------------------------------------------------------------------------------- weblogic-1725565574-fgmsr 1/1 Running 0 31s elk-3823852708-zwbfg 1/1 Running 0 6m
Connect to the POD & verify ELK started on the POD machine
以下のコマンドを実行してElasticstashの起動を確認します。$ kubectl exec -it elk-3823852708-zwbfg /bin/bash
Elasticstashが起動済みであれば、以下のようなインデックスが現れるはずです。$ curl GET -i "http://127.0.0.1:9200" $ curl GET -i "http://127.0.0.1:9200/_cat/indices?v
KibanaはWebアプリケーションなので、Kibanaをブラウザで確認します。以下のURLでブラウザからアクセスします。------------------------------------------------------------------------------------------------------------------------------------------- health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open .kibana Mm38FXiGSGWcfjmNKOcwFQ 1 1 1 0 3.2kb 3.2kb -------------------------------------------------------------------------------------------------------------------------------------------
Kibanaのwelcomeページが現れていればOKです。31712/tcpはk8s_elk.yamlで定義されたノードのポートです。http://[NODE_IP_ADDRESS]:31711/app/kibana
(訳注)
上記は2017/10/18現在の原文に従って訳していますが、k8s_elk.yamlでは31711/tcpはKibana用のポート、31712/tcpはElasticstash用のポートとして定義されています。
上記は2017/10/18現在の原文に従って訳していますが、k8s_elk.yamlでは31711/tcpはKibana用のポート、31712/tcpはElasticstash用のポートとして定義されています。
Config Logstash
このファイルで、"input blcok" ではLogstashが入力ログを取得する場所を定義しています。 "filer block" ではWebLogic Serverのログのフィルタリングに関するシンプルなルールを定義しています。"output block" は、Logstashがフィルタリングしたログをアドレスとポート番号で定まる転送先のElassticsearchを定義しています。$ vim /opt/logstash/config/logstash.conf
Start Logstash & verify the result
Logstash起動後、ブラウザを開いてElasticsearchのアドレスを指定します。$ /opt/logstash/bin# ./logstash -f ../config/logstash.conf
上記の結果と比較すると、logstash-2017.07.28の行が増えています。これはLogstashが起動しログをElasticsearchに転送していることを意味します。WebLogic Serverの任意のアプリケーションにアクセスを試行することもできます。この時点でELKはログを収集し処理することができます。http://[NODE_IP_ADDRESS]:31712/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size ------------------------------------------------------------------------------------------------------------------------------------------- yellow open logstash-2017.07.28 aj2jlijbSXyJ8KQXJKQJtQ 5 1 332 0 531.9kb 531.9kb yellow open .kibana RYGWMj1ZQ1mS1gwa7yKevg 1 1 1 0 3.2kb 3.2kb -------------------------------------------------------------------------------------------------------------------------------------------
Integrate ELK with Weblogic via Network
このアプローチでは、Weblogic ServerとLogstashエージェントが1つのPodにデプロイされ、ElasticsearchとKibanaが別のPodにデプロイされています。LogstashとElasticsearchは同一Podにないので、Logstashは(外部の)ipポート経由でElasticsearchにデータを転送する必要があります。このタイプの統合では、Logstash用にネットワークを設定する必要があります。複数のWebLogic Serverを使用する場合に共有ディスクをメンテナンスしたりログフォルダを整理したりする必要がないという長所がありますが、ログを収集できるように、各Weblogic ServerのPodにLogstashを追加する必要があるという短所があります。Deploy Elasticsearch & Kibana to Kubernetes
k8s_ek.yamlはk8s_elk.yamlに類似しており、両者は同じイメージを使います。違いはk8s_ek.yamlでは環境変数"LOGSTASH_START = 0"が設定されている点です。これはつまり、Logstashはコンテナ起動時に開始しないということです。また、k8s_ek.yamlではLogstashのポート番号を定義しません。Logstashは同一PodにあるWebLogic Serverで定義します。$ kubectl create -f k8s_ek.yaml
We can verify the ek start up with:
http://[NODE_IP_ADDRESS]:31712/_cat/indices?v
Generate Logstash config with EK POD ip
以下のような情報を取得できました。$ kubectl describe pod ek-3905776065-4rmdx
EK PodのIPアドレスは[10.34.0.5]です。このIPをLogstash.confに設定する必要があります。Logstash.confを配置する必要のある共有ボリュームに移動し、Logstash.confを作成します。Name: ek-3905776065-4rmdx Namespace: liangz Node: [NODE_HOST_NAME]/10.245.252.214 Start Time: Thu, 02 Aug 2017 14:37:19 +0800 Labels: k8s-app=ek pod-template-hash=3905776065 Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"liangz-cn","name":"ek-3905776065","uid":"09a30990-7296-11e7-bd24-0021f6e6a769","a... Status: Running IP: 10.34.0.5
2個のVolumeMountsをLogstash-Weblogic Podに定義します。input { file { path => "/shared-logs/*.log*" start_position => beginning } } filter { grok { match => [ "message", "<%{DATA:log_timestamp}> <%{WORD:log_level}> <%{WORD:thread}> <%{HOSTNAME:hostname}> <%{HOSTNAME:servername}> <%{DATA:timer}> <<%{DATA:kernel}>> <> <%{DATA:uuid}> <%{NUMBER:timestamp}> <%{DATA:misc}> <%{DATA:log_number}> <%{DATA:log_message}>" ] } } output { elasticsearch { hosts => ["10.34.0.5:9200"] } }
Log path: /shared-logs同一PodのLogstashにログを共有するWebLogic Serverのために
conf path: /shared-confLogstash用には、Logstash.configを使います。
上記のLogstash.confでは、入力ファイルパス(/shared-logs)を定義しており、これは以前に見つけた"10.34.0.5:9200"でElasticsearchに接続します。
Deploy Logstash & Weblogic POD to Kubernetes
このyamlでは、 2つのイメージ(Weblogic、Logstash)を追加しています。この2個のイメージは、Podレベルの共有ボリューム "shared-logs"でWeblogicログを共有していましたが、これは、WeblogicとLogstashを一緒に定義する利点です。もうNFSを使いません。Podをより多くのノードに配備したい場合は、レプリカの値を変更するだけです。すべての新しいPodには、Podレベルの共有ボリュームがそれぞれあります。ログの競合を考慮する必要はありません。$ kubectl create -f k8s_logstash_weblogic.yaml
$ kubectl get pods NAME READY STATUS RESTARTS AGE ------------------------------------------------------------------------------------------- ek-3905776065-4rmdx 1/1 Running 0 6m logstash-wls-38554443-n366v 2/2 Running 0 14s
Verify the result
以下のURLを確認しましょう。最初の行は、Logstashがログを収集してElasticsearchに転送したことを示しています。http://[NODE_IP_ADDRESS]:31712/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size ---------------------------------------------------------------------------------------------------------------------------- yellow open logstash-2017.08.02 4hyMJS1BSlaL_NoAQ-8QTw 5 1 273 0 435kb 435kb yellow open .kibana RaivcqCITTOM-VqrG-Nctw 1 1 1 0 3.2kb 3.2kb
0 件のコメント:
コメントを投稿