この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
「みなさん、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環境が存在していれば、そんなに苦労するところは無いと思います。
- EKS環境をワーカーノード含めて作成し、適当なPodを動作させる
- Sysdigエージェントのアクセスキーを取得する
- kubernetesクラスターにSysdigエージェント用の設定を追加する
- 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
を使います。
エージェントインストールにあたり前提条件は以下の通り。
- エージェントインストール対象ホスト制限
- Host Requirements for Agent Installation
- EC2なら問題なし
- 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_k8s
、k8s_cluster_name
の部分をコメントアウトして書き換えます。
修正前。
sysdig-agent-configmap.yaml
#######################################
# new_k8s: true
# k8s_cluster_name: production
security:
k8s_audit_server_url: 0.0.0.0
k8s_audit_server_port: 7765
修正後はこのようになります。cluster_nameは、各環境のkubernetesクラスター名を指定してください。
sysdig-agent-configmap.yaml
#######################################
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のドキュメントはすべてこちらにまとめられているので、全体像を知るにはこちらをみてください。
セットアップが完了したので、この後は、EKSクラスターで展開したPodや各種リソースがどのように見えるのかを解説していきます。こちらの記事をご参照ください。
それでは、今日はこのへんで。濱田(@hamako9999)でした。