ACK(Alibaba Cloud Container Service for Kubernetes)でロギングをするために、Log Service を使ってみる


# はじめに
Kubernetesクラスターのログは、クラスターに障害や問題が発生した際、その原因を突き止めるために役立つものです。たとえば、AWS では CloudWatch Container Insights などの機能を使ってログの監視を行うかと思います。では、Container Service for Kubernetes (ACK) を使用してアプリケーションのログを管理するにはどうすればいいのか、見ていきましょう。

## Log Service について
ACK も、アプリケーションのログを管理するための様々な方法を提供しており、Log Service はそのひとつです。
Log Serviceを利用することで、アプリケーションのログを簡便に収集することができます。
使い方も簡単で、ACK クラスターを作成する際に、Log Service を有効化することで、コンテナの標準出力や、テキストファイルなどのログデータを自動的に収集することが可能です。
では、早速 Log Service の使い方を見ていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/42e13208-5e40-db81-625e-56819f26cf35.png)

## Logtail をインストールする
まずは、ACK クラスターに Logtail をインストールします。
Logtail は、ログ収集エージェントで、クラスターの中で動作して、自動的にログを収集し、Log Service に送信してくれます。
AWS でいう CloudWatch Agent のようなものですね。

ACK コンソールを開き、 Clusters を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/6c2f5cbe-066f-bde4-276b-d1fc2ee28bd7.png)

Create Kubernates Cluster を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/2b996292-1967-90d3-0d2c-b62e46bdf145.png)

クラスターの作成手順については、以下の記事を参照して進めてください。
記事中の「Component Configurationsの設定」まで進んだら、Log Service の設定を見ていきます。
[ACK(Alibaba Cloud Container Service for Kubernetes)を使って、Alibaba Cloudでk8sを動かしてみる - Qiita](https://qiita.com/d-engine/items/d187ab1d4a0c3df076bc)

Component Configurations ページで、作成するクラスターに対して Logtail をインストールします。
Enable Log Service にチェックを付け、Create Project を押します。
これで、`k8s-log-{ClusterID}` という命名規則で、プロジェクトが作成され、ログ収集が行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/260a372d-6cf4-330c-5e27-1c32ee6f0245.png)

後は上記記事と同じです。次のページにすすみ、規約にチェックをいれて、Create Cluster を押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/757494f4-51b6-d844-3ba2-f9d4a04fcc4b.png)

### 既存のクラスターに Logtail をインストールする
また、既存クラスターに Logtail をインストールすることもできます。
Culster ページにて、対象のクラスターの Details を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/07ff666e-4503-6291-7412-4d7b2f648654.png)

Operasions -> Add-on を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/cac4695b-d13a-a45c-c22f-4852bfd22bb4.png)

Logs and Monitoring ページで logtail-ds の install を押します。
（今回はインストール済のクラスタなので、Uninstall になっています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/34a70f8d-02c0-23c6-a9f8-5dd4400b48ae.png)

### アプリケーション作成時に、Log Service の設定を行う
アプリケーションを作成する際に、コンテナからログデータを収集するように Log Service を設定することができます。
アプリケーションの作成には、コンソールのウィザードまたは YAML テンプレートを使用することができます。

ACK コンソールを開き、 Clusters を押します。
Cluster ページにて、操作対象のクラスター名を選択し、Actions カラムの Details を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/1fec16f5-4cb8-cb3f-2ab5-33d5b5f9b4a4.png)

Details ページが開くので、Worksloads -> Deployments を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/21e375c2-3276-6050-af9a-b0fafd764be3.png)

そして、Create from Image を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/c17b0078-3f07-e054-f720-06ef41ea15c8.png)

Basic Information wizard 、Name、Replicas、Type を指定します。次に、次へ をクリックして、コンテナ ウィザードページに進みます。
コンテナイメージなどの設定については、再度以下の記事を参照してください。
[ACK(Alibaba Cloud Container Service for Kubernetes)を使って、Alibaba Cloudでk8sを動かしてみる - Qiita](https://qiita.com/d-engine/items/d187ab1d4a0c3df076bc)

上記の記事でコンテナポートの設定が終わったら、この記事に戻ります。
Log Service 欄でプラス記号（+）をクリックして、設定項目を追加します。各設定項目は、LogstoreとLog Path in Container（stdoutに設定可能）で構成されています。

`Logstore`:収集したログデータを保存するLogstoreを指定します。指定したLogstoreが存在しない場合、システムは自動的にクラスタに関連付けられたLog ServiceプロジェクトにLogstoreを作成します。

`Log Path in Container`: ログデータを収集するパスを指定します。`usr/local/tomcat/logs/catalina.*.log` と指定した場合、Tomcatアプリケーションのログファイルを収集することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/af92e2d3-60f4-7f86-4145-6362b662fdab.png)

カスタムタグも設定しておきましょう。ログデータに対してタグを付けることで判別しやすくなります。
この例では、アプリケーションのバージョンを識別するために release タグを付けています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/6ff58c4a-19ed-1ad6-0d69-67235abe0d8c.png)

それ以外の手順は変わりません、クラスターの作成を行いましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/9c1939a6-03eb-5f46-69d6-ff2b2b90aeea.png)


次の手順では、ログサービスを構成する方法を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/84279f5f-b500-7367-6443-02cfea2203d9.png)

### ログを確認する

Log Serive Console を開きます。
ダークモードに対応していてカッコいいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/8103cb7a-d50f-5440-c936-53b6650a7de6.png)

Projects 欄で、先ほど作成した k8s クラスターに関連したプロジェクトを押し、Logstores タブに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/22d589bc-5cdd-4928-2c10-587bf4c5119e.png)

Logstores のリストで、先程設定した catalina を探します。
catalina を選択し、Search & ... を押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/ccf707b5-8d3f-ae12-e1f4-4c290f890ee2.png)

すると、Tomcat アプリケーションの標準出力と、コンテナのテキストログを確認することができます。
また、先程設定したカスタムタグである release:1.0.0 がちゃんと付与されていることがわかります。
実際の運用では、監視したいアプリケーションや、ログの種別ごとに Logstore を切ることで、監視がしやすくなりますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/019ac8a1-a499-e95e-3a1e-6816397132cd.png)

また、ACK コンソールからコンテナのログを表示する手順は以下のとおりです。

ACK コンソールで、Culsters を押し、対象のクラスターの Details を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/5128b2cc-7f76-3e6c-f434-ab7d9b8a5998.png)

Operations から Log Center を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/2595f44b-8e4d-7eef-549c-2f68df4afd2f.png)

Application Logs タブを選択し、Logstore のセレクトボックスから、表示したい Logstore を選びます。
選べたら Select Logstore を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/8a4b7982-5c94-30ff-1f41-31d436980479.png)

すると、簡単に先程と同じ Logstore の画面を開くことができました！かなり使いやすいですね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2964981/e997ba07-8e83-156d-c170-9aa48c0b777f.png)

## おわりに
今回は、k8s でアプリケーションを運用する上で大切なロギングを ACK で利用するため、 Log Serive の有効化と使い方を紹介しました。
実際に出力されたログをどうやって分析するのかは、アプリケーションや組織の体制によって変わってきますが、GUI 上から簡単にロギングができることで、監視設計がかなりしやすくなりそうだ、というイメージは持って頂けたのではないでしょうか。