AWSこんにちは、エンジニアリングGの安田(@dasoran2)です。7月に入社してAI・機械学習チームに所属しています。趣味は猫耳で入社早々会社では猫耳エンジニアとしての地位を確立しつつあります。今回は転職早々ではあるものの、自分のチームでDatadogをトライアル導入したのでその話を書きます。本稿は以下のような内容をお話しします。Datadogを選んだ理由DatadogでのDocker監視の概要Datadogでハマったところ*1事の発端チーム内でレスポンスタイムに問題が発生して、その原因を調査する機会がありました。メトリクスがCloudWatchで収集されているもののほかになく、それ以上を取るにはインスタンスやコンテナの中に入って収集する必要がありました。そのため、迅速な対応ができずこの状況を打破したいと考え各種導入検討を開始しました。基本的にはメトリクスが取れればよかったためDatadog以外も検討したのですが、最終的にはDatadogを選択しました。小さな理由としてはUIが綺麗ダッシュボードのカスタマイズ性の高さレスポンスに対する悪評がなかったなどありますが、大きな理由はDockerのメトリクス取得をしっかりサポートしているAWSのリソースが取れるしかも(現状)無料この点でした。Dockerのメトリクス取得がかなりよかったのでこの魅力をお伝えしたいと思います。DatadogでDockerのメトリクスを取得するDatadogはmackerelやNewRelicと同じく専用のAgentをサーバーで動かすことでメトリクスを取得します。詳しくは以下のURLを確認してください。docs.datadoghq.comAgentはLinux上で動くパッケージDockerイメージ二種類から選ぶことになります。理由は後述しますが、Dockerの監視をする場合はDocker版のAgentを使うことを強く推奨します。Agentを動かし始めると、AgentがDatadogにデータを送信しDatadog側がサーバーを認識する仕組みになっています。システムのメトリクスのほかにもちろんですがミドルウェアのメトリクスを取ることもできます。ミドルウェアのメトリクスを取るには基本的には*2設定を追加するだけで大丈夫です。いったミドルウェアのメトリクスが取れるのかは以下を確認していただければわかりますが、かなり広範囲をカバーしています。integrationを使用します。docs.datadoghq.comDocker自体のメトリクスを取得するには前述の通り設定を追加と有効になります。Docker版のAgentを使った場合はデフォルトで有効になっています。動いているコンテナの総数などが取れます。以下のようなかっこいいダッシュボードで一覧を確認できるようになります。動いているDockerコンテナ一覧Dockerの中のミドルウェアのメトリクスを取得するDocker自体のメトリクスはともかく、今やアプリケーション自体がDockerの中で動いているのでDockerの中のJVMやミドルウェアのメトリクスが取得したくなります。ここがDatadogで一番よかったところで、Datadogはテンプレート的な設定を用意すると動いているコンテナのIP等を自動で解決してメトリクスを取得してくれる仕組みがあります。http://localhost/nginx_status/といったnginxの設定があります。http://172.16.0.5/nginx_status/とすればホストからメトリクスが取得できます。当然ですがnginxのコンテナが何台動くかは事前には把握できない(するような設計にしたくない)ので、現実的ではなくなります。http://%%host%%/nginx_status/とすれば、上で動いているコンテナのIPを勝手に解決してメトリクスを取得してくれるようになります。nameを指定しています。*5これで、仮想マシン上で動いていたプロセスと同じようにDocker上のプロセスのメトリクスも取れるようになりました。はまったところと、素敵なDocker監視生活を開始できたわけですが、結構ハマりポイントがあります。integrationまでセットアップしたのですが、その後AutoDiscoveryがコンテナを見つけてくれず苦労しました。containers.と、Docker版Agentの話しかなく、どこにも明記はないもののDocker版のAgentでないと監視してくれないのではと気づきました。真偽は不明ですが、同じ設定をDocker版Agentに食わせたところ動いたためおそらくそうなのだと思います。ちなみにわりとlogを吐いてくれるので、agent.log*6を見ると解決することが多いです。-vこのコマンドで現在の設定適用状況が確認できるのでこちらも活用しました。2.JVMの監視をする場合イメージが違うJVMの監視を行う場合、JMXを使って監視します。docs.datadoghq.comここの説明を読む分に明記されていないと思うのですが、実はDocker版Agentには通常版とJVMを含んだ版があります。hubここを見るとlatestlatest-jmxこの2つがあり、latest-jmxでないとintegrationが動きません3.Datadogの5系のAgentと6系のAgentのドキュメントがぐちゃぐちゃよく読んでいないのが悪いのですが、主要バージョンとして5系と6系があるらしくドキュメントも両方あります。不便だと思ったのは、バージョンごとにドキュメントが独立しているのではなく同じネームスペースに両方のバージョンのドキュメントが混在していることです。これは気をつけましょうくらいですが、共有のために書いておきます。普通のメトリクスが取れるようになったダッシュボードで監視できるようになったDockerコンテナ上のプロセスもいい感じに取得できるようになったというわけで、いってしまえば当たり前の環境が手に入りました。いったサービスの中でDatadogでよかった、というとやはりDocker内のプロセス監視がお手軽だった点です。Dashboardが非常に見やすく満足度は結構高かったです。今回作ったDashboard地味に嬉しかった点として、細かく欲しい機能が存在したことがあります。SAML認証とかslack通知とかLBとかのネットワーク系とか個別個別は他のサービスにもありますが、その対応の広さは魅力でした。まとめまとめとしてはDatadogのDocker監視よかったよ!これに尽きます。今回導入にあまり時間を使いたくなかったのでフルマネージドで監視するにはかなりありな選択肢だと思いました。Hiring!この会社に入社してまだ一月と少しですが、早速こういった「やりたい!」を業務で取り組ませていただけました。他にも様々な仕事にチャレンジできる環境です。逆にやりたいことが沢山ありすぎて手が回りません!一緒に取り組んでくれる方、お待ちしています!*1:アイコンがかわいい*2:Docker版のAgentでは、jmxを取るためにはJVMの入ったDockerイメージを使用する必要があります。はまったところ参照*3:こちらはミドルウェア以外のインテグレーションを含んでいます。nameに限りません。AI・機械学習チームの笹川です。2名によるシステムリニューアル支援(前編)こんにちは。月別アーカイブ注目記事はてなブログをはじめよう!m3techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。