Log Service は Alibaba Cloud Container Service の Kubernetes クラスターと連携されています。 クラスター作成時に、コンテナーの標準出力およびコンテナーのテキストファイルなどの Kubernetes クラスターに関するコンテナーログを素早く収集するために、Log Service を有効化します。

Kubernetes クラスター作成時の Log Service の有効化

Kubernetes クラスターをまだ作成していない場合、このセクションの以下の手順で Log Serivce を有効化してください。

  1. Container Service コンソール にログインします。
  2. 左側のナビゲーションウィンドウで [クラスター] をクリックし、右上隅の [Kubernetes クラスターの作成] をクリックします。
  3. [作成] ページのクラスターの設定方法に関しては、「クラスターの作成」をご参照ください。
  4. ページの下部まで移動し、[Log Service の使用] チェックボックスをオンにします。 新しく作成された Kubernetes クラスターに、ログプラグインがインストールされます。
  5. [Log Service の使用] チェックボックスをオンにした際、プロジェクトオプションが表示されます。 プロジェクトは、ログを管理する Log Service での単位です。 プロジェクトについて詳しくは、「プロジェクト」をご参照ください。 現在、2 つの方法によりプロジェクトを使用できます。
    • 既存のプロジェクトを選択し、収集したログを管理します。
    • システムにより、収集したログを管理する新しいプロジェクトが自動的に作成されます。 プロジェクト名は自動的に k8s-log-{ClusterID} と設定されます。"ClusterID" は 作成された Kubernetes クラスターの固有識別子です。
  6. 設定完了後、右上隅の [作成] をクリックします。 表示されたダイアログボックスで、[OK] をクリックします。
    クラスターの作成が完了した後、新しく作成された Kubernetes クラスターが [クラスターリスト] ページに表示されます。

作成された Kubernetes クラスターでの Log Service コンポーネントの手動インストール

Kubernetes クラスターを作成している場合、Log Service を使用するには、このセクションの以下の方法に従ってください。

  • Log Service コンポーネントがインストールされていません。 コンポーネントを手動でインストールしてください。
  • 以前のバージョン の Log Service コンポーネントがインストールされています。 コンポーネントをアップグレードしてください。 コンポーネントをアップグレードしない場合、ログ収集の設定には、Log Service コンソールまたは CRD (custom resource difinition) のみが使用できます。

Log Service コンポーネントのバージョンの確認

  1. Cloud Shell を使用してターゲット Kubernetes クラスターに接続してください。

    詳細は、「Cloud Shell 上での kubectl を使用した Kubernetes クラスターの管理」をご参照ください。

  2. 以下のコマンドを実行し、アップグレードまたは移行操作が必要かどうかを素早く判断します。
    $ kubectl describe daemonsets -n kube-system logtail-ds | grep ALICLOUD_LOG_DOCKER_ENV_CONFIG                    
    • ALICLOUD_LOG_DOCKER_ENV_CONFIG: true が表示された場合、アップグレードまたは移行の必要がなく、コンポーネントを直接使用することができます。
    • 他の結果が表示された場合は、さらにコンポーネントを確認します。
  3. 以下のコマンドを実行し、コンポーネントのインストールに Helm を使用するかどうか判断します。
    $ helm get alibaba-log-controller | grep CHART
    CHART: alibaba-cloud-log-0.1.1                    
    • 出力の 0.1.1 が Log Service コンポーネントのバージョンです。 0.1.1 およびそれ以降のバージョンをお使いください。 バージョンがそれ以前の場合、Log Service コンポーネントのアップグレードを参照して、コンポーネントをアップグレードしてください。 有効なバージョンのコンポーネントをインストールするために Helm を使用している場合は、次の手順を飛ばすことができます。
    • 結果が出力されない場合、コンポーネントは Helm を使用してインストールされています。 ただし、DeamonSet インストール方法が使用されている場合があります。 次の手順に従って、さらに確認してください。
  4. DeamonSet は旧バージョンまたは新バージョンです。
    $ kubectl get daemonsets -n kube-system logtail                    
    • 出力がない場合または No resources found. が出力された場合、Log Service コンポーネントがインストールされていません。 インストール方法について詳しくは、「Log Service コンポーネントの手動インストール」をご参照ください。
    • 正しい結果が出力された場合、旧バージョンの DaemonSet がアップグレードが必要なコンポーネントのインストールに使用されています。 コンポーネントのアップグレードについて詳しくは、「Log Service コンポーネントのアップグレード」をご参照ください。

Log Service コンポーネントの手動インストール

  1. Cloud Shell を使用してターゲット Kubernetes クラスターに接続します。

    詳細は、「Cloud Shell 上での kubectl を使用した Kubernetes クラスターの管理」をご参照ください.

  2. Cloud Shell で echo $ ALIBABA_CLOUD_ACCOUNT_ID コマンドを使用して、Alibaba Cloud アカウントの ID を取得します。
  3. 以下のコマンドを実行します。
    このコマンドでは、必要に応じて次のパラメーターを指定する必要があります。 $ {your_k8s_cluster_id} {your_ali_uid} および {your_k8s_cluster_region_id}
    wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id ${your_k8s_cluster_id} --ali-uid ${your_ali_uid} --region-id ${your_k8s_cluster_region_id}
    パラメーターの説明
    • your_k8s_cluster_id: Kubernetes クラスター ID です。
    • your_ali_uid:Alibaba Cloud のアカウント ID です。 手順 2 で取得できます。
    • your_k8s_cluster_region_id: Kubernetes クラスターのあるリージョンです。これはリージョンとゾーンから検索できます。 たとえば、クラスターが杭州にある場合、このパラメーターの値は "cn-hangzhou" になります。

インストール例

[root@iZbp******biaZ ~]# wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c77a*****************0106 --ali-uid 19*********19 --region-id cn-hangzhou
--2018-09-28 15:25:33--  https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh
Resolving acs-logging.oss-cn-hangzhou.aliyuncs.com... 118.31.219.217, 118.31.219.206
Connecting to acs-logging.oss-cn-hangzhou.aliyuncs.com|118.31.219.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2273 (2.2K) [text/x-sh]
Saving to: ‘alicloud-k8s-log-installer.sh’

alicloud-k8s-log-installer.sh                      100%[================================================================================================================>]   2.22K  --. -KB/s    in 0s

2018-09-28 15:25:33 (13.5 MB/s) - ‘alicloud-k8s-log-installer.sh’ saved [2273/2273]

--2018-09-28 15:25:33--  http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz
Resolving logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com... 118.31.219.49
Connecting to logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com|118.31.219.49|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2754 (2.7K) [application/x-gzip]
Saving to: ‘alibaba-cloud-log.tgz’

alibaba-cloud-log.tgz                              100%[================================================================================================================>]   2.69K  --. -KB/s    in 0s

2018-09-28 15:25:34 (79.6 MB/s) - ‘alibaba-cloud-log.tgz’ saved [2754/2754]

[INFO] your k8s is using project : k8s-log-c77a92ec5a3ce4e64a1bf13bde1820106
NAME:   alibaba-log-controller
LAST DEPLOYED: Fri Sep 28 15:25:34 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1beta1/CustomResourceDefinition
NAME                                   AGE
aliyunlogconfigs.log.alibabacloud.com  0s

==> v1beta1/ClusterRole
alibaba-log-controller  0s

==> v1beta1/ClusterRoleBinding
NAME                    AGE
alibaba-log-controller  0s

==> v1beta1/DaemonSet
NAME        DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
logtail-ds  2        2        0      2           0          <none>         0s

==> v1beta1/Deployment
NAME                    DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
alibaba-log-controller  1        1        1           0          0s

==> v1/Pod(related)
NAME                                     READY  STATUS             RESTARTS  AGE
logtail-ds-6v979                         0/1    ContainerCreating  0         0s
logtail-ds-7ccqv                         0/1    ContainerCreating  0         0s
alibaba-log-controller-84d8b6b8cf-nkrkx  0/1    ContainerCreating  0         0s

==> v1/ServiceAccount
NAME                    SECRETS  AGE
alibaba-log-controller  1        0s


[SUCCESS] install helm package : alibaba-log-controller success.
			

Log Service コンポーネントのアップグレード

Helm または DeamonSet を使用して、以前のバージョンの Log Service コンポーネントをインストールしている場合、以下のようにコンポーネントのアップグレードまたは移行を行ってください。
Cloud Shell を使用してターゲット Kubernetes クラスターに接続する必要があります。 詳細は、「 Cloud Shell 上での kubectl を使用した Kubernetes クラスターの管理」をご参照ください。

Helm による Log Service コンポーネントのアップグレード (推奨)

  1. 以下のコマンドを実行し、Log Service コンポーネントの最新の Helm パッケージをダウンロードします。
    wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz -O alibaba-cloud-log.tgz
    					
  2. Helm アップグレード使用して、コンポーネントをアップグレードします。 コマンドは以下のようになります。
    helm get values alibaba-log-controller --all > values.yaml && helm upgrade alibaba-log-controller alibaba-cloud-log.tgz --recreate-pods -f values.yaml
    					

DaemonSet による Log Service コンポーネントのアップグレード

DaemonSet テンプレートを変更することにより、Log Service コンポーネントをアップグレードできます。 イメージアカウントが acs の場合、コンテナレジストリで表示できる最新バージョンに、イメージタグをアップグレードします。 イメージアカウントが acs の場合、コンテナレジストリ で表示できる最新バージョンに、イメージタグをアップグレードします。

  • タグのアップグレードで Logtail のローリング更新が有効になっていない場合、Logtail ポッドを手動で削除して、Logtail 更新をトリガーする必要があります。
  • マスターノードを含むすべてのノードで、Logtail が実行されているかどうかを確認する必要があります。 Logtail がすべてのノードで実行されない場合、 Logtail の tolerations を設定する必要があります。
tolerations:
- operator: "Exists"

詳細については、「最新の Helm パッケージ構成」をご参照ください。

DeamonSet の移行

このアップグレード方法は、Log Service コンポーネントバージョンの確認 の際に、旧バージョンの DaemonSet によりコンポーネントがインストールされたことを確認した場合に当てはまります。 この方法は、Container Service の Log Service 設定をサポートしていません。 以下のようにコンポーネントをアップグレードできます。

  1. インストールコマンドの最後に、お使いの Kubernetes クラスターにより使用される Log Service のプロジェクト名をパラメーターとして追加します。
    たとえば、プロジェクト名が "k8s-log-demo" で、クラスター ID が " c12ba2028cxxxxxxxxxx6939f0b" の場合、インストールコマンドは次のようになります。
    wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c12ba2028cxxxxxxxxxx6939f0b --ali-uid 19*********19 --region-id cn-hangzhou --log-project k8s-log-demo
    						
  2. インストールが正常に完了したら、Log Service コンソール にログインします。
  3. インストールが正常に完了したら、Log Service コンソール にログインします。
  4. Log Service コンソールで、新しいマシングループ k8s-group-${your_k8s_cluster_id} に、プロジェクトの履歴収集設定および Logstore を適用します。
  5. 1 分後、履歴収集設定はマシングループの履歴からバインドを解除されます。
  6. ログ収集が正常である場合、以前にインストールした Logtail DaemonSet を削除できます。
アップグレード中に、いくつかのログが複製されます。 CRD 設定管理は CRD により作成された設定に関してのみ有効になります。 履歴設定は CRD 管理をサポートしていません。これは、履歴設定が CRD モードではない方法で作成されているためです。

アプリケーション作成時の Log Service の設定

Container Service により、アプリケーション作成時に、コンテナーログの収集のため Log Service を設定することができます。 現在、アプリケーション作成に、コンソールまたは YAML テンプレートを使用できます。

コンソールによるアプリケーションの作成

  1. Container Service コンソール にログインします。
  2. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイメント] をクリックします。 右上隅の [イメージによる作成] をクリックします。
  3. 名前クラスター名前空間レプリカ および タイプ を設定し、 [次へ] をクリックします。
  4. コンテナー ページ上で、Tomcat イメージを選択し、コンテナーのログ収集を設定します。

    以下では Log Service に関係する設定についてのみ説明しています。 他のアプリケーション設定について詳しくは、「イメージを利用したデプロイアプリケーションの作成」をご参照ください。

  5. Log Service を設定します。 + 記号をクリックし、Logstore 名 および ログパス からなる設定を作成します。
    • Logstore 名: 収集されたログが保存される Logstore を指定します。 指定された Logstore が存在しない場合、クラスターに関連づけられた Log Service のプロジェクトに Logstore がシステムにより自動的に作成されます。
      Logstore 名にはアンダースコア (_) を使用することはできません。 代わりにハイフン (-) を使用できます。
    • ログパス: 収集されたログがあるパスを指定します。 たとえば、"/usr/local/tomcat/logs/catalina. *.log" を使用し、Tomcat のテキストログを収集します。
      ログパスを stdout として指定した場合、コンテナーの標準出力および標準エラー出力が収集されます。

      それぞれの設定は自動的に、対応する Logstore の設定として作成されます。 デフォルトでは、ログ収集にシンプルモード (1 行ずつ) が使用されます。 多くの収集モードを使用するには、ログインし、Log Service コンソールに移動します。対応するプロジェクト (デフォルトでは、"k8s-log" というプレフィックスをもちます) および設定を変更する Logstore を入力します。

  6. タグをカスタマイズします。 + 記号をクリックし、新しいカスタムタグを作成します。 それぞれのカスタムタグは、収集したログに追加されるキーとバリューのペアです。 カスタムタグを使用し、コンテナーログにマークをすることができます。 たとえば、バージョン番号としてカスタムタグを作成できます。
  7. コンテナーのすべての設定が完了したら、右上隅の [次へ] をクリックし、次の設定を実行します。 詳細は、「イメージを利用したデプロイアプリケーションの作成」をご参照ください。

YAML テンプレートによるアプリケーションの作成

  1. Container Service コンソール にログインします。
  2. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイメント] を選択します。 右上隅の [テンプレートによる作成] をクリックします。
  3. YAML テンプレートの構文は Kubernetes 構文のものと同じです。 コンテナー用の収集設定を指定するため、コンテナーへ 収集設定 および カスタムタグ を追加し、対応する volumeMounts およびボリュームを作成するため "env" を使用する必要があります。 シンプルポッドの例は以下のようになります。
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:
        ######### Configure environment variables  ###########
        - name: aliyun_logs_log-stdout
          value: stdout
        - name: aliyun_logs_log-varlog
          value: /var/log/*.log
        - name: aliyun_logs_mytag1_tags
          value: tag1=v1
        ###############################
        ######### Configure vulume mount ###########
        volumeMounts:
        - name: volumn-sls-mydemo
          mountPath: /var/log
      volumes:
      - name: volumn-sls-mydemo
        emptyDir: {}
      ###############################
    • ニーズに合わせて、3 つのパートを順番に設定します。
    • 1 つ目のパートでは、環境変数を使用し、収集設定 および カスタムタグ を作成します。 設定に関係するすべての環境変数は、aliyun_logs_ というプレフィックスを持ちます。
    • 収集設定の作成に関するルールは、以下のようになります。
      - name: aliyun_logs_{Logstore name}
        value: {log path}                            

      例として、2 つの収集設定を作成します。 aliyun_logs_log-stdout "env" により、"log-stdout" という名前の Logstore および stdout のログパスを含む設定を作成します。 コンテナーの標準出力は "log-stdout" という名前の Logstore に収集され保存されます。

      Logstore 名にはアンダースコア (_) を使用できません。 代わりにハイフン (-) を使用できます。
    • カスタムタグ の作成に関するルールは、以下のようになります。
      - name: aliyun_logs_{a name without '_'}_tags
        value: {Tag name}={Tag value}                            
      タグの設定後にコンテナーのログが収集された場合、タグに対応するフィールドが自動的に Log Service にアタッチされます。
    • 収集設定に stdout ログパスではないパスが指定された場合、これに対応する volumeMounts を作成します。

      たとえば、"/var/log/*.log" ログパスが収集設定に追加され、それにより "/var/log" volumeMounts が追加されます。

  4. YAML テンプレートの作成が完了したら、[デプロイメント] をクリックし、テンプレートの設定を実行する Kubernetes クラスターに配信します。

ログ収集の制御に環境変数を設定する

コンテナーの環境変数は、複数の高度なパラメーターに対応しています。これらは、ログ収集の制御に使用されます。 以下の表でパラメーターについて説明します。
パラメーター 説明 備考
aliyun_logs_{key}
  • 必須項目。 ログ収集設定の名前の指定に使用されます。 {key} の値は、英字で始める必要があり、英数字、およびハイフン (-) を使用できます。 アンダースコア (_) は使用できません。
  • オプションパラメーター aliyun_logs_{key}_logstore を使用することで、 Logstore を指定しない場合、ログは、{key} という名前の Logstore に自動で収集されます。
  • コンテナーの標準出力を収集するには、このパラメーターを、 "stdout" として設定します。 指定したパスのログを収集するには、このパラメーターをパスとして設定します。
  • - name: aliyun_logs_catalina
    
       stdout
  • - name: aliyun_logs_access-log
    
       /var/log/nginx/access.log
aliyun_logs_{key}_tags 任意。 ログの特定に使用されます。 このパラメーター値の形式は、{tag-key}={tag-value} です。
- name: aliyun_logs_catalina_tags

   app=catalina
-
aliyun_logs_{key}_project 任意。 収集したログを保存するため、Log Service 内のプロジェクトを指定するために使用されます。 このパラメーターを設定しない場合、ログはターゲット Kubernetes クラスターに設定したプロジェクトに収集されます。
- name: aliyun_logs_catalina_project

   my-k8s-project
Logtail があるリージョンと同じリージョンに、プロジェクトを設定する必要があります。
aliyun_logs_{key}_logstore 任意。 Log Service の Logstore を指定するために使用されます。 このパラメーターを指定しない場合、収集したログの保存には、{key} という名前の Logstore が使用されます。
- name: aliyun_logs_catalina_tags

   my-logstore
-
aliyun_logs_{key}_shard 任意。 Logstore のシャード数の指定に使用されます。 このパラメーター値の範囲は、1~10 です。 このパラメーターを指定しない場合、デフォルトでは、 2 つのシャードが作成されます。
- name: aliyun_logs_catalina_shard

   4
-
aliyun_logs_{key}_ttl 任意。 ログが保存される期間 (日単位) の指定に使用されます。 このパラメータ値の範囲は 1~3650 です。
  • このパラメーターを 3650 に設定すると、ログは永続的に保存されます。
  • このパラメーターを設定しない場合、ログはデフォルトで、 90 日間保存されます。
- name: aliyun_logs_catalina_ttl

   3650
-
aliyun_logs_{key}_machinegroup 任意。 マシングループの指定に使用されます。 このパラメーターを設定しない場合、デフォルトのマシングループが有効になります。
- name: aliyun_logs_catalina_machinegroup

   my-machine-group
-

シナリオ 1 : 1 つの Logstore に複数のアプリケーションのログデータを収集する

aliyun_logs_{key}_logstore パラメーターを設定して、このタスクを実行します。 たとえば、2 つのアプリケーションの stdout ログを stdout-logstore という名前の 1 つの Logstore に収集するには、このパラメーターを使用して、 2 つのアプリケーションの環境変数を設定します。

アプリケーション 1 の環境変数を、以下のとおり設定します。
######### set environment variables ###########
    - name: aliyun_logs_app1-stdout
      value: stdout
    - name: aliyun_logs_app1-stdout_logstore
      value: stdout-logstore

アプリケーション 2 の環境変数を、以下のとおり設定します。

######### set environment variables ###########
    - name: aliyun_logs_app2-stdout
      value: stdout
    - name: aliyun_logs_app2-stdout_logstore
      value: stdout-logstore
シナリオ 2 : 各アプリケーションのログデータを、専用プロジェクトに収集する
プロジェクトに、1つの特定のアプリケーションのログデータのみが保存される場合です。
このタスクを実行するには、これらの手順に従って、各アプリケーションを設定します。
  1. 各プロジェクトで、マシングループを作成し、マシングループの識別子をカスタマイズします。
    識別子名の形式は、k8s-group-{cluster-id} です。
  2. 各アプリケーションの環境変数については、以下のパラメーターを設定します。projectlogstore、および machinegroup
    machinegroup パラメーターの値は、手順 1 で作成したマシングループの名前になります。
    以下は、アプリケーションの環境変数の設定例です。
    ######### set environment variables ###########
        - name: aliyun_logs_app1-stdout
          value: stdout
        - name: aliyun_logs_app1-stdout_project
          value: app1-project
        - name: aliyun_logs_app1-stdout_logstore
          value: app1-logstore
        - name: aliyun_logs_app1-stdout_machinegroup
          value: app1-machine-group

ログの表示

この例では、コンソールで作成された Tomcat アプリケーションのログを表示します。 アプリケーション設定の完了後、Tomcat アプリケーションのログは、 Log Service に収集され保存されます。 ログの参照は以下のようになります。

  1. Log Service コンソール にログインします。
  2. Log Service コンソール にログインします。
  3. コンソールで、Kubernetes クラスターに対応するプロジェクト (デフォルトは、"k8s-log-{Kubernetes cluster ID}") を選択します。
  4. [Logstore] リストで、設定で指定された Logstore を確認し、[検索] をクリックします。
  5. この例では、[ログ検索] ページで、Tomcat アプリケーションの標準出力ログ、およびコンテナー内のテキストログを参照できます。また、ログフィールドにアタッチしたカスタムタグを検索できます。

その他の情報

  1. デフォルトでは、データを収集するためにシンプルモードが使用されます。つまり、解析なしで 1 行ずつデータが収集されます。 より複雑な設定を実行するには、以下の Log Service ドキュメントを参照し、Log Service コンソールにログインして設定を変更します。
  2. コンソールを使用したログ収集設定に加えて、CRD 設定により Kubernetes クラスターのログを直接収集することもできます。 詳細は、「CRD での Kubernetes ログ収集の設定」をご参照ください。
  3. 例外のトラブルシューティングに関しては、「収集エラーをトラブルシュート」をご参照ください。