Amazon EKS のログ収集
ステップ 1.ホスト型コレクタと HTTP ソースの作成
このステップでは、Sumo サービスでログを受信するために HTTP エンドポイントを作成します。このプロセスでは、Sumo のホスト型コレクタで HTTP ソースを作成します。Sumo では、コレクタがソースを使用してデータを受信します。
ホスト型コレクタと HTTP ソースの作成手順
-
まだ Sumo アカウントをお持ちでない場合、https://www.sumologic.com/ で [Free Trial (無料トライアル)] をクリックすればアカウントを作成できます。
-
Sumo ヘルプの「ホスト型コレクタの設定」の指示に従って、ホスト型コレクタを作成します。(ホスト型コレクタがすでに作成されている場合は、この手順はスキップしてください。)
-
前のステップで作成したコレクタで HTTP ソースを作成します。手順については、Sumo ヘルプの「HTTP ログとメトリクス ソース」を参照してください。
-
HTTP ソースの設定が完了したら、Sumo に HTTP エンドポイントの URL が表示されます。この URL を書き留めます。この URL は、データを Sumo に送信するために Kubernetes サービスを設定するときに使用します。
ステップ 2.Kubernetes シークレットの作成
HTTP ソース URL を使用して Kubernetes でシークレットを作成します。シークレット名を変更するには、それに合わせて Kubernetes マニフェストを変更する必要があります。
kubectl create secret generic sumologic --from-literal=collector-url=<HTTP_Soucre_URL>
<HTTP_Source_URL>
は、「ステップ 1 ホスト型コレクタと HTTP ソースの作成」でHTTP ソースを作成したときに表示された URL です。
次の確認メッセージが表示されます。
secret "sumologic" created
ステップ 3.Sumo Kubernetes FluentD プラグインのインストール
このステップでは、kubectl を使用して FluendD プラグインをインストールします。
開始する前に、FluendD の Readme ファイルの 「環境変数」で、カスタマイズできる設定、注釈を使用して選択した環境変数を上書きし、Sumo への送信からデータを除外する方法について確認してください。環境変数により、カスタム メタデータ値を指定できます。
-
GitHub リポジトリを複製します。
-
リポジトリには、2 つのバージョンの
fluentd.yaml
が入っています。使用するファイルは、認証に RBAC を使用しているかどうかによって異なります。RBAC は Kubernetes 1.6 以上ではデフォルトで有効になっています。RBAC を使用していない場合 (Kubernetes 1.5 以下) は、このコマンドを実行します。
kubectl create -f /daemonset/nonrbac/fluentd.yaml
RBAC を使用している場合 (Kubernetes 1.6 以上) は、このコマンドを実行します。
kubectl create -f /daemonset/rbac/fluentd.yaml
プラグインをインストールしてから数分以内にコンテナ ログが Sumo に取り込まれ始めます。
ステップ 4.Kubernetes API ログの収集
このステップでは、Kubernetes API ログの収集を設定します。 Kubernetes API から情報を抽出して Sumo に転送するための Dockerized python スクリプトが用意されています。
Kubernetes API ログを収集する手順
-
「ステップ 1 ホスト型コレクタと HTTP ソースの作成」で作成したホスト型コレクタ上で HTTP ソースを作成します。手順については、Sumo ヘルプの「HTTP ログとメトリクス ソース」を参照してください。ソースのソース カテゴリを
k8s/api/
に設定します。 -
HTTP ソースの設定が完了したら、Sumo に HTTP エンドポイントの URL が表示されます。この URL を書き留めます。
-
Dockerized python スクリプトが含まれている sumologic-k8s-api リポジトリを複製します。
-
Kubernetes クラスタで RBAC を使用している場合は
sumologic-k8s-api-cronjob-rbac.yaml.
を開きます。RBAC を使用していない場合はsumologic-k8s-api-cronjob.yaml
を開きます。 -
YAML ファイルの
env
セクションに HTTP ソースの URL を挿入します。 -
(省略可能) 必要に応じて CronJob スケジュールを更新します。デフォルトでは 5 分ごとに実行されます。
- RBAC を使用しているかどうかによって次のいずれかのコマンドを実行します。
RBAC を使用している場合は、このコマンドを実行します。
kubectl create -f sumologic-k8s-api-cronjob-rbac.yaml
RBAC を使用していない場合は、このコマンドを実行します。
kubectl create -f sumologic-k8s-api-cronjob.yaml
Heapster 経由での Kubernetes 用のメトリクス収集
Kubernetes クラスタからメトリクスを収集するためのお勧めの方法は、Heapster と Sumo コレクタおよび Graphite ソースを使用することです。Heapster は Kubenetes クラスタ全体のメトリクスを集計します。Heapster はクラスタ内のポッドとして実行され、クラスタのすべてのノードを検出して各ノードの kubelet (マシン上の Kubernetes エージェント) から使用率情報を照会します。Heapster は、クラスタ、ノード、およびポッド レベルのメトリクスを提供します。
この手順では、YAML 設定ファイルを使用して以下の Kubernetes リソースをインストールまたは設定します。
-
Heapster — heapster.yaml ファイルは、Heapster を Kubernetes クラスタにインストールし、Kubernetes クラスタでデプロイとして動作する Sumo コレクタに対して Graphite 形式で メトリクス データを送信するように Graphite シンクを設定します。
-
設定マップ — configmap.yaml ファイルは、Sumo インストール済みコレクタを Kubernetes クラスタにデプロイするための deployment.yaml ファイル (下記参照) 設定を提供します。
-
Kubenetes サービス — Kubernetes ポッドは、Kubernetes サービスを使用して相互に通信します。service.yaml は、Heapster が デプロイとして動作している Sumo コレクタ ポッドと通信するために使用するサービスを作成します。
-
デプロイ — deployment.yaml は、いずれかの Kubernetes クラスタに Sumo インストール済みコレクタのレプリカを 2 つ作成します (それぞれの名前は「sumo-graphite」です)。 この Kubernetes デプロイは、sumo-sources 設定マップ (configmap.yaml ファイルで作成されます) を使用して Kubernetes クラスタで Sumo インストール済みコレクタを設定します。
YAML 設定の適用
YAML 設定は次のコマンドで適用します。
Kubectl apply -f heapster.yaml Kubectl apply -f configmap.yaml Kubectl apply -f service.yaml Kubectl apply -f deployment.yaml
メトリクス収集の検証
次のコマンドで動作を確認します。
kubectl get service
kubectl describe service sumo-graphite
kubectl get pods
kubectl get all
数分したら Sumo Web アプリケーションにログインし、[Collection (コレクション)] ページ ([Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)]) で、Sumo コレクタが Heapster からメトリクスを受信していることを確認します。
YAML 設定ファイル
このセクションでは、「Heapster 経由での Kubernetes 用のメトリクス収集」で説明した YAML ファイルを示します。
heapster.yaml
このセクションでは heapster.yaml
の内容を示します。
Graphite シンクは、デフォルトの名前空間を使用して「sumo-graphite」にメトリクスを送信するように設定されます。
apiVersion: v1 kind: ServiceAccount metadata: name: heapster namespace: kube-system --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: heapster namespace: kube-system spec: replicas: 1 template: metadata: labels: task: monitoring k8s-app: heapster spec: serviceAccountName: heapster containers: - name: heapster image: k8s.gcr.io/heapster-amd64:v1.4.2 imagePullPolicy: IfNotPresent command: - /heapster - --source=kubernetes:https://kubernetes.default - --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086 - --sink=graphite:tcp://sumo-graphite.default:2003?prefix=kubernetes.training
configmap.yaml
kind: ConfigMap apiVersion: v1 metadata: name: "sumo-sources" data: sources.json: |- { "api.version": "v1", "sources": [ { "name": "Ankit Test", "category": "kubernetes/metrics", "automaticDateParsing": true, "contentType": "Graphite", "timeZone": "UTC", "encoding": "UTF-8", "protocol": "TCP", "port": 2003, "sourceType": "Graphite" } ] }
deployment.yaml
env:value タグのプレイスホルダには、Sumo Logic アクセス ID とキーを代入します。
apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: app: sumo-graphite name: sumo-graphite spec: replicas: 2 template: metadata: labels: app: sumo-graphite spec: volumes: - name: sumo-sources configMap: name: sumo-sources items: - key: sources.json path: sources.json containers: - name: sumo-graphite image: sumologic/collector:latest ports: - containerPort: 2003 volumeMounts: - mountPath: /sumo name: sumo-sources env: - name: SUMO_ACCESS_ID value: <SUMO_ACCESS_ID> - name: SUMO_ACCESS_KEY value: <SUMO_ACCESS_KEY> - name: SUMO_SOURCES_JSON value: /sumo/sources.json
service.yaml
以下に抜粋する service.yaml
ファイルは、「sumo-graphite」というサービス (Heapster 設定の Graphite/Carbon シンクのホストです) を作成し、sumo-graphite というアプリケーション名 (service.yaml
でセレクタ タグとして参照されます) でポッドとの通信を可能にします。
apiVersion: v1 kind: Service metadata: name: sumo-graphite spec: ports: - port: 2003 selector: app: sumo-graphite