EKS環境をsysdigでモニタリングしてみた(セットアップ編)

「みなさん、sysdig初めてみませんか?」

という軽いノリで始まりましたが、AWS Container Partnerにも名前を連ねるSysdigを触ってみたのでその様子をお届けいたします。今回はインストール編ということで、EKS環境の作成とSysdigエージェントの設定周辺をご紹介。その設定手順の様子を見ていただきながら、案外簡単に入るんだなぁというところ見てもらえれば幸いです。

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     Sysdig マツリダワッショイ
    |_|_|
    し'´J

Sysdigとは?

Secure DevOps Platform for Cloud-Native | Sysdig

sysdigのVisionについては、こちらの動画によく出てます。作りがすごいドラマチック。

AWSのContaeinr Security Partnersにも名前を連ねています。

日本語だと、こちらの記事でSysdigが生まれてきた背景やアーキテクチャ上の特徴が端的に紹介されているので、非常に参考になります。ぜひこちらも御覧ください。

アーキテクチャ上の特徴は、Kubernetesベースのシステムにおいて、Podにエージェントを入れるのではなく、ノードにエージェントを入れる方法をとっており、ここからホストのカーネルにアクセスしてシステムコールを採取する方式です。

(引用元:https://thinkit.co.jp/article/15841)

メイン製品ラインとしては、Sysdig MonitorとSysdig Securityがあり、今回はSysdig Monitorのセットアップについてのブログとなります。

また、sysdigにはSaaS版とオンプレミス版の2つがありますが、今回はSaaS版を前提とした手順になっています。

EKS環境のモニタリングを完了させるまでの手順

今回、EKS環境をSysdigモニタリングするのですが、その大まかな手順をここでおさらいしておきましょう。といっても手順自体は全体的にシンプルで、Kubernetes環境が存在していれば、そんなに苦労するところは無いと思います。

  1. EKS環境をワーカーノード含めて作成し、適当なPodを動作させる
  2. Sysdigエージェントのアクセスキーを取得する
  3. kubernetesクラスターにSysdigエージェント用の設定を追加する
  4. AWSインテグレーション部分の設定を追加する

手順①:EKS環境をワーカーノード含めて作成し、適当なPodを動作させる

最初にKubernetes環境作っていきます。Kubernetes環境自体は別になにでも良いので、すでに適当な環境があるかたはそれをお使いください。

AWSでEKS環境をセットアップするのに一番簡単なのは、eksctlを使う方法です。以下手順にそって、EKSクラスターを作成してみてください。

一点注意事項として、今回SysdigエージェントはワーカーノードにDaemonsetとして展開するため、ワーカーノードを作成する[Cluster with Linux-only workload]を利用して進めてください(Fargateではなく)。

ワーカーノードまでできあがったら、モニタリング用のPodを配置しましょう。なんでも良いのですが、自分はEKS Workshopで紹介されていた、以下のサンプルアプリを利用しました。

さて、無事、EKS環境出来上がりましたでしょうか?

手順②:Sysdigエージェントのアクセスキーを取得する

ここから、Sysdigの話になります。アクセスキーの発行にはライセンスが必要となるので、無料お試しからライセンスを取得してみましょう。日本語ページがわかりやすいと思います。

上から「無料お試し」からライセンスを取得してみてください。その後、流れの中でSysdig Agentのアクセスキーが表示されるのでそれをメモっておいてください。

もしくはセットアップ後、自分のアイコンをクリックし[Settings]→[Agent Installation]にアクセスでも、アクセスキーを確認できます。

手順③:kubernetesクラスターにSysdigエージェント用の設定を追加する

いよいよ、クラスターにSysdigエージェント用の設定を追加していきます。メインでkubectlを使います。

エージェントインストールにあたり前提条件は以下の通り。

  • エージェントインストール対象ホスト制限
  • Kubernetesのバージョンが1.2以上
    • sysdigエージェントはDaemonSetsでデプロイされるため、1.2以上のバージョンが必要となります
  • Sysdigのアカウントとアクセスキー
    • 事前にSysdingアカウントを作成し、ウェルカムウィザードでアクセスキーを取得しておきます

実際にインストールを実施していきます。公式マニュアルの手順は、以下を参照してみてください。

sysdig-cloud-scripts/agent_deploy/kubernetes at master · draios/sysdig-cloud-scriptsより、以下のファイルをダウンロードします。

  • sysdig-agent-clusterrole.yaml
  • sysdig-agent-daemonset-v2.yaml
  • sysdig-agent-configmap.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-clusterrole.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-daemonset-v2.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-configmap.yaml

sysdigエージェント用の名前空間を設定します。名前空間の作成は任意ですが、sysdig関連のコンポーネントはそれなりに数があるため、管理上の手間も考えると名前空間(namespace)は作っておいたほうが良いです。今回は、Namespaceにsysdig-agentを使います。

kubectl create ns sysdig-agent

sysdigエージェントが利用するシークレットを登録します。利用するAccess Keyは、「手順②:Sysdigエージェントのアクセスキーを取得する」を使います。下記のを書き換えてください。

kubectl create secret generic sysdig-agent --from-literal=access-key=<your sysdig access key> -n sysdig-agent

kubernetesクラスター用のロール、サービスアカウントなどを定義していきます。

kubectl apply -f sysdig-agent-clusterrole.yaml -n sysdig-agent
kubectl create serviceaccount sysdig-agent -n sysdig-agent
kubectl create clusterrolebinding sysdig-agent --clusterrole=sysdig-agent --serviceaccount=sysdig-agent:sysdig-agent  

ConfigMapを書く環境に合わせて修正します。kubernetesのStateメトリクスとクラスター名を有効化します。sysdig-agent-configmap.yamlを開きます。以下の部分の、new_k8sk8s_cluster_nameの部分をコメントアウトして書き換えます。

修正前。

    #######################################
    # new_k8s: true
    # k8s_cluster_name: production
    security:
      k8s_audit_server_url: 0.0.0.0
      k8s_audit_server_port: 7765

修正後はこのようになります。cluster_nameは、各環境のkubernetesクラスター名を指定してください。

    #######################################
    new_k8s: true
    k8s_cluster_name: <your cluster name>
    security:
      k8s_audit_server_url: 0.0.0.0
      k8s_audit_server_port: 7765

修正が完了したら、Configmapを展開します。

kubectl apply -f sysdig-agent-configmap.yaml -n sysdig-agent

DaemonSetを展開します。

kubectl apply -f sysdig-agent-daemonset-v2.yaml -n sysdig-agent

これで、実際のsysdigエージェントがPodとしてRunning状態になっていればOKです。daemonsetやpodの状態を確認してみましょう。

$ kubectl get daemonset -n sysdig-agent
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
sysdig-agent   2         2         2       2            2           <none>          2d
$ kubectl get pod -n sysdig-agent
NAME                 READY   STATUS    RESTARTS   AGE
sysdig-agent-bxqpz   1/1     Running   0          2d
sysdig-agent-msmn4   1/1     Running   0          2d

こんな感じで、sysdigエージェントが起動していればOKです。ここまでOKでしょうか?後一息ですよ。

手順④:AWSインテグレーション部分の設定を追加する

最後に、Sysdig monitorからAWS環境に対して情報を取得するための認証情報を設定します。流れとしては、アクセス対象のAWSアカウントに権限をもつIAMユーザーを作成し、そのアクセスキーとシークレットキーをsysdig側に設定する流れとなります。詳細な手順は以下を参照してください。

AWSに慣れている方であれば、下記ポリシーを保有したIAMユーザーを作成し、その情報を[Settings]→[AWS]で設定すればOKです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "autoscaling:Describe*",
                "cloudwatch:Describe*", 
                "cloudwatch:Get*", 
                "cloudwatch:List*", 
                "dynamodb:ListTables",
                "dynamodb:Describe*",
                "ec2:Describe*",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:DescribeCacheClusters", 
                "elasticache:ListTagsForResource",
                "elasticloadbalancing:Describe*",
                "rds:Describe*",
                "rds:ListTagsForResource",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:ReceiveMessage"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

上記画面でStatusがOKになっていたら大丈夫です。

(重要)すべての設定が完了したらしばらく待つ

自分はここでしばらくハマりましたw エージェントも動いていて、AWSインテグレーションも設定したののに、いつまでたっても、Sysdig Monitorのエクスプローラーに何も表示されない場合は、しばらく待ちましょう。15分ほどまって、さらにSysdig管理画面からログアウトしてログインするなどして見ましょう。

しばらくまって、以下のように[EXPLORE]において、GROUPINGSにAWSのアイコンやKubernetesのアイコンが選択可能になっていたら、無事データが連携されています。お疲れさまでした!

セットアップ自体はシンプル。画面反映に時間がかかる

以上、Sysdig MonitorによるEKSクラスターへのセットアップ手順を紹介しました。丁寧にやっていけばそれほどハマリポイントも無いと思います。

sysdigのドキュメントはすべてこちらにまとめられているので、全体像を知るにはこちらをみてください。

Sysdig Documentation

セットアップが完了したので、この後は、EKSクラスターで展開したPodや各種リソースがどのように見えるのかを解説していきます。こちらの記事をご参照ください。

それでは、今日はこのへんで。濱田(@hamako9999)でした。