K8SビルドEFK

                                                   **  efk的搭建**

Elasticsearchは、フルテキストおよび構造化検索、それは通常、インデックスに使用してログデータを大量に検索されることができ、リアルタイム、分散型でスケーラブルなサーチエンジンが文書の多くの異なる種類の検索にも使用することができます。

通常Kibanaと一緒に展開Elasticsearch、Kibanaが機能Elasticsearch強力なデータ視覚化ダッシュボードで、Kibanaは、Webインターフェイスを介してElasticsearchログデータを閲覧することができます。

Fluentdは、人気のあるオープンソースのデータ収集された容器のログファイル、フィルタリングおよび変換ログデータを取得することにより、Kubernetes Fluentdクラスタノード上に実装され、クラスタElasticsearchにデータを渡し、それがクラスタ内で索引付けされて格納されます。

それは、各ノード上のポッドKubernetesの作業を実行できるようにすることを、のは、スケーラブルなElasticsearchクラスタを構成し、Kubernetesクラスタ内Kibanaアプリケーションを作成し、最終的にDaemonSet Fluentdを介して実行することから始めましょう。

クラスタElasticsearchの作成1.

あなたはElasticsearchクラスタを作成する前に、まず名前空間を作成します。

KUBE-efk.yamlを作成します。

K8SビルドEFK

kubectlはefk.yamlの申請-f

kubectl GET NSこのEFK名前空間があるかどうかを確認

ここでは、1つ以上のノードが他のノードと通信「スプリットブレイン」を持っていないとき、マルチノード・クラスタ「スプリットブレイン」の高可用性の問題、の出現を避けるために、3 Elasticsearchポッドを使用して、複数のマスターノードがあるかもしれません。

キーポイントは、パラメータのdiscover.zen.minimum_master_nodes = Nは、我々はNが2に設定する必要があることを意味し、ここでは3つのノードを持っているようなElasticsearchクラスタマスターノードとライン内のノードの数であり、N / 2 + 1を、設定しなければならないことです。Elasticsearchクラスタを展開するときにこのように、ノードは一時的にクラスタから切断された場合、他の2つのノードが新しいプライマリノードを選択することができ、その後、クラスタが引き続き実行され、ノードの試みの終わりに再度参加することができ、あなたはこれを覚えておく必要がありますパラメータ。

まずelasticsearchと呼ばれるヘッドレスサービス、新しいファイルelasticsearch-svc.yamlを作成し、以下のように、文書が読み取ります。

K8SビルドEFK

サービスは、我々Elasticsearch StatefulSetは、このサービスに関連付けられたときに、サービスがElasticsearchポッドのラベルアプリ= elasticsearchとDNS Aレコードを返し、その後、CLUSTERIP =なしに設定されます、ラベルアプリ= elasticsearchを指定して、名前のelasticsearchを定義しますサービスは、サービスのヘッドレスを設定します。最後に、我々は、RESTのAPIと対話するための、ならびにノード間の通信のために、それぞれのポート9200,9300を定義します。

その後、我々は、ヘッドレス・サービスを作成します

-f elasticsearch-svc.yamlを適用kubectl

K8SビルドEFK

今、私たちはポッドとして.elasticsearch.logging.svc.cluster.localヘッドレスサービスと安定したドメイン名が設定されていることを、我々は、特定のアプリケーションStatefulSetによってElasticsearchポッドを作成します。

Kubernetes StatefulSetは私たちがポッドのための安定したアイデンティティと永続ストレージを割り当てることができます、ポッドを管理するためにStatefulSetを使用する必要があるので、再スケジューリングまたは再起動後に安定ポッドストアのデータを確実にするElasticsearchの必要性は、同じまま。

私たちは事前にオブジェクトを作成する必要がありますように、我々は、対応するプロビジョニング・ドライブをインストールする必要があるので、ここでは、ストレージバックエンドとしてNFSを使用して、ES-データ-DBと呼ばれるSTORAGECLASSオブジェクトを使用し
、我々はelasticsearch-storageclass.yamlを作成します

K8SビルドEFK

その後、我々はこのSTORAGECLASSにPVC対応を作成します

弾性検索pvc.yaml

K8SビルドEFK

最後に、我々はstatefulsetを作成します

弾性検索statefulset.yaml

K8SビルドEFK
K8SビルドEFK
K8SビルドEFK

私たちは、その後、kubectlを作成するために使用します

-f elasticsearch-storageclass.yamlを適用kubectl

-f elasticsearch-pvc.yamlを適用kubectl

-f elasticsearch-statefulset.yamlを適用kubectl

その後、我々は、ポッドの動作を見て

K8SビルドEFK

展開後のポッドが完了しElasticsearchクラスタが正常に動作している場合、我々は、REST APIを要求することにより確認することができます。ローカルポートに転送するには、次のコマンドを使用しElasticsearchノード9200(例えば、ES-クラスタ0)ポートに対応します。

K8SビルドEFK

その後、我々は別のウィンドウを開きます

K8SビルドEFK

通常、そのような情報を持っている必要があります。

ES-クラスタ-0、ES-クラスタ-1、およびES-クラスタ-2、現在のマスターノードがES-クラスタ - である:我々正常に作成され、3つのノードのK8S-ログと呼ばれるElasticsearchクラスターことを示すために、上記の情報を参照してください。 0。

Kibanaサービスを作成します。2.

Elasticsearchクラスタの起動が成功し、その後、我々はkibana.yamlという名前のファイルを作成し、Kibanaサービスを展開することができ、次のように、対応する文書が読み取ります。

K8SビルドEFK
K8SビルドEFK

上面我们定义了两个资源对象,一个 Service 和 Deployment,为了测试方便,我们将 Service 设置为了 NodePort 类型,Kibana Pod 中配置都比较简单,唯一需要注意的是我们使用 ELASTICSEARCH_URL 这个环境变量来设置Elasticsearch 集群的端点和端口,直接使用 Kubernetes DNS 即可,此端点对应服务名称为 elasticsearch,由于是一个 headless service,所以该域将解析为3个 Elasticsearch Pod 的 IP 地址列表。

然后我们创建这个服务

kubectl apply -f kibana.yaml

K8SビルドEFK

过了一会,我们的kibana的服务就起来了。
K8SビルドEFK
如果 Pod 已经是 Running 状态了,证明应用已经部署成功了,然后可以通过 NodePort 来访问 Kibana 这个服务,在浏览器中打开http://<任意节点IP>:30245即可,如果看到如下欢迎界面证明 Kibana 已经成功部署到了 Kubernetes集群之中。

K8SビルドEFK

3.部署 Fluentd

Fluentd 是一个高效的日志聚合器,是用 Ruby 编写的,并且可以很好地扩展。对于大部分企业来说,Fluentd 足够高效并且消耗的资源相对较少,另外一个工具Fluent-bit更轻量级,占用资源更少,但是插件相对 Fluentd 来说不够丰富,所以整体来说,Fluentd 更加成熟,使用更加广泛,所以我们这里也同样使用 Fluentd 来作为日志收集工具。

工作原理
Fluentd 通过一组给定的数据源抓取日志数据,处理后(转换成结构化的数据格式)将它们转发给其他服务,比如 Elasticsearch、对象存储等等。Fluentd 支持超过300个日志存储和分析服务,所以在这方面是非常灵活的。主要运行步骤如下:

首先 Fluentd 从多个日志源获取数据
结构化并且标记这些数据
然后根据匹配的标签将数据发送到多个目标服务去

K8SビルドEFK

日志源配置
比如我们这里为了收集 Kubernetes 节点上的所有容器日志,就需要做如下的日志源配置:

K8SビルドEFK

路由配置
上面是日志源的配置,接下来看看如何将日志数据发送到 Elasticsearch:

K8SビルドEFK
K8SビルドEFK
match:标识一个目标标签,后面是一个匹配日志源的正则表达式,我们这里想要捕获所有的日志并将它们发送给 Elasticsearch,所以需要配置成**。
id:目标的一个唯一标识符。
type:支持的输出插件标识符,我们这里要输出到 Elasticsearch,所以配置成 elasticsearch,这是 Fluentd 的一个内置插件。
log_level:指定要捕获的日志级别,我们这里配置成info,表示任何该级别或者该级别以上(INFO、WARNING、ERROR)的日志都将被路由到 Elsasticsearch。
host/port:定义 Elasticsearch 的地址,也可以配置认证信息,我们的 Elasticsearch 不需要认证,所以这里直接指定 host 和 port 即可。
logstash_format:Elasticsearch 服务对日志数据构建反向索引进行搜索,将 logstash_format 设置为true,Fluentd 将会以 logstash 格式来转发结构化的日志数据。
Buffer: Fluentd 允许在目标不可用时进行缓存,比如,如果网络出现故障或者 Elasticsearch 不可用的时候。缓冲区配置也有助于降低磁盘的 IO。
4.安装
要收集 Kubernetes 集群的日志,直接用 DasemonSet 控制器来部署 Fluentd 应用,这样,它就可以从 Kubernetes 节点上采集日志,确保在集群中的每个节点上始终运行一个 Fluentd 容器。当然可以直接使用 Helm 来进行一键安装,为了能够了解更多实现细节,我们这里还是采用手动方法来进行安装。

まず第一に、我々は次のように、ConfigMap Fluentdプロファイルによって新しいfluentd-configmap.yamlファイルをオブジェクトを指定する必要があります。
K8SビルドEFK

K8SビルドEFK
K8SビルドEFK

9200サービス:当社が収集kubeletアプリケーションにログディレクトリとドッキングウィンドウのドッキングウィンドウコンテナを設定上記の設定ファイルには、収集したデータを処理した後elasticsearchに送信されるログに記録します。

次に、以下のようfluentd-daemonset.yamlファイルを作成し、読み取ります。

K8SビルドEFK
K8SビルドEFK
K8SビルドEFK
K8SビルドEFK
私たちは、fluentd-CONFIGますConfigMapは、ノードを柔軟に制御することができるログに加えて収集することができFluentdコンテナを通じてマウントするターゲット・ボリューム上に作成したので、ここで我々はまた、nodSelectorプロパティを追加しました:

また、私たちのクラスタを使用しているためkubeadm構築され、デフォルトで汚染されたマスターノードは、そのログインするためにも、マスターノードを収集し、あなたは寛容に追加する必要があります。

K8SビルドEFK

その後、我々は上記目的およびdaemonsetサービスconfigmapを作成します

K8SビルドEFK

K8SビルドEFK

私たちは、ビューポッドが稼働している見ることができます。

その後、我々は、Discoverをクリックし、kibanaページを入力してください

K8SビルドEFK

私たちはlogstash- *すべてのログデータElasticsearchクラスタを一致させるために専用のテキストボックスに、ここで、logstash形式を使用して収集ここでは、Fluentdプロファイルログの前に我々が必要Elasticsearchインデックスを設定することができ、[OK]をクリックします次に、以下のページにアクセスしてください。

K8SビルドEFK

このページでは、フィールドを@timestamp選択し、[インデックスパターンの作成]をクリックし、フィールドには、ドロップダウンリストで、時間によるログデータをフィルタリング設定するために使用され、作成が完了すると、左側のナビゲーションメニューの発見をクリックし、その後、ヒストグラムの一部を見ることができます図は、最近のログデータを収集して:

K8SビルドEFK

おすすめ

転載: blog.51cto.com/14181888/2468170