tubone

tubone

Boyaki makes a new world


 Recent posts  6 / 53

SepOctNovDecJanオムロン HV-F312で腰の痛みをなくすGithub Actionを使って、簡単CIを作ってみるChromeDriverがGoogleChrome v76 に対応していないらしい。Googleデータポータルを触ってみるHyper-vにMetasploitableの仮想マシンを立ててみるNightwatch.jsでE2Eテストを回したときにうまく動かないたった一つの理由particles.jsをVue.jsで使ってかっこいいページを作るGitPitchを使ってMarkdownからプレゼンテーションを作ってBadgeをレポジトリに貼るSentryを使ってフロントエンドのエラーを確認するJSON Resume + API With GitHubを使って、さくっと職務経歴書チックなもののAPIなど作ってみるGitHubに30日間草を生やし続けた感想Netlify Formを使って、簡易Contact Formを作ってみる10/1は天下一品の日Ansible + Serverspecを使ってMacの環境構築を自動でする (Ansible編)Ansible + Serverspecを使ってMacの環境構築を自動でする (Serverspec編)今日のラーメン台風の時の我が家のセンサー(netatmo)の値をZabbixで見る究極の謝罪はSlackのスタンプを活用しよう! ~明日から使えるSlackスタンプスニペット集~ハロウィーンはえちえちでチンパンジーなイベントじゃない。GitHubと向き合うイベントだ昔ながらのラーメンたべたい珠玉の一杯。たくさん残業した日はこのラーメンを食べろ!スープの衝撃!ここまでうまいスープはあるのか!?なラーメンGitHubに草を生やし続け90日が経ったので感想を書くGoでAWS Lambdaを動かして、GitHubAPIv4(GraphQL)を叩いてみた感想Hadoopゾウさんについて本気出して考えてみたNuxt.jsでparticles-bg-vueを使うNuxt.jsのmodulesをCompositionAPIで使ってみる(@nuxtjs/toast編)くろおびらーめん with チャーシュー飯Nuxt.jsのmodulesをCompositionAPIで使ってみる(@nuxtjs/toast Global Option編)Nuxt.js + Composition APIでVuexのStateをReactiveに使う方法【初学者】Juliaを使って円周率を求める初めてプログラミングをした時のゴミソース見つけた面倒なことはPythonにやらせよう@GitHub API v4を使ったリリース実績取得Gatsby.jsで作ったブログに読み終わるまで○○分を追加した話Google広告設定でみる属性情報であなたをもっと知ろう!Blog用に新しいLogo作った話今年1年を振り返ってGoのEchoでJaegerを使ってボトルネックを調査するGatsby.jsで作ったBlogの投稿をGitHubの草にして表示させるWeb Developer Roadmap 2020を眺めながら今年の目標(Frontend)をだらだら考えるの会AWS X-RayでLambdaのトレースをしつつ、Datadog APMに連携するElixirでパラレルな負荷試験ツールを作るMonWedFri
Elixirでパラレルな負荷試験ツールを作るAWS X-RayでLambdaのトレースをしつつ、Datadog APMに連携するWeb Developer Roadmap 2020を眺めながら今年の目標(Frontend)をだらだら考えるの会Gatsby.jsで作ったBlogの投稿をGitHubの草にして表示させるGoのEchoでJaegerを使ってボトルネックを調査する今年1年を振り返って


 SearchBox

Search your interesting by Algolia in this blog.


 All 145 Tags

ぼやき 19JavaScript 12GitHub 7Vue.js 6TypeScript 6ラーメン 6デブ活 5Nuxt.js 4React 3Auto Provisioning 3Gatsby.js 3Serverspec 3Mac 3AWS 3自動テスト 3Python 3Ansible 3GitHub Action 2Write Code Every Day 2ChromeDriver 2Netlify 2Chainer 2Lambda 2toast 2CompositionAPI 2GraphQL 2Go 2AWS認定ソリューションアーキテクトプロフェッショナル 1Nightwatch.js 1Gatsby 1Sentry 1監視 1GitPitch 1GitHub Badges 1Azusa Colors 1 1weed 1GitHubAction 1JSON Resume 1GitHub Pages 1Resume 1CV 1Netlify Form 1Travis 1Contact Form 1CI 1天下一品 1Headless CMS 1健康 1Googleデータポータル 1腰痛 1BI 1Azure Devops Build Pipeline 1netatmo 1台風 1IoT 1センシング 1Google Apps Script 1API FLASH 1SlackAPI 1Clasp 1E2E Test 1Jest 1Unit Test 1Slack 1Stamp 1ハロウィーン 1Nim 1docopt 1CLI 1昆布 1Selenium 1GoogleChrome 1資格 1勉強法 1Hadoop 1ゾウ 1Google Analytics 1仮想化 1RNN 1LSTM 1Chat BOT 1アイマス 1デレマス 1Hyper-v 1particles-bg-vue 1particle 1Proton 1particles.js 1ひなこのーと 1Deep Learing 1OpenCV 1機械学習 1CNN 1分類学習 1顔認識 1modules 1metasploitable 1powerShell 1チャーシュー飯 1ギター 1DTM 1エフェクター 1ATELIERZ 1Caparison 1VOCALOID 1Julia 1円周率 1初心者 1The Gauss–Legendre algorithm 1Leibniz formula for π 1Composition API 1Vuex 1ストアパターン 1かわいい 1恐竜時代 1ことり隊 1早稲田 1test 1GitHub API v4 1リリース実績 1Estimated Reading Time 1あと何分 1Logo 1SVG 1Google広告設定 1Google 1属性情報 1Persolal Data 1Server 1Seti@Home 1振り返り 1particle.js 1Echo 1Jaeger 1ボトルネック調査 1React Calendar Heatmap 1Frontend 1Web Developer Roadmap 2020 1Elixir 1Load Test 1E2Eテスト 1X-Ray 1Datadog 1APM 1
この記事は196文字1で読めます

AWSのTracingサービスのX-Rayを使って、LambdaのService MapやTraceを取得しつつ、DatadogのAPMに連携していきます。

Table of Contents

AWS X-Ray とは何ですか。

公式サイトによると

AWS X-Ray はアプリケーションが処理するリクエストに関するデータを収集するサービスです。

データを表示、フィルタリング、洞察を取得して問題の識別や最適化の機会を識別するために使用するツールを提供します。

アプリケーションに対するトレース対象のリクエストの場合、リクエストとレスポンスに関する情報だけではなく、アプリケーションがダウンストリーム AWS リソース、マイクロサービス、データベース、および HTTP ウェブ API に対して行う呼び出しの詳細な情報も表示できます。

公式Doc AWS X-Ray とは何ですか。

とのことです。

難しいですね・・。もう少し簡単に言ってみると

アプリケーションAWSのサービス(DynamoDBとかS3とか)と通信したり外部サービスのAPIをコールしたりするリクエストとレスポンスを収集し、記録し、良き感じに可視化してくれるサービスです。

このようなサービスのことをTracingとか言ったりします。

実は、X-Rayをお勉強する前に、この手のサービス(Tracing)の基本を押さえる必要があると思い、お正月にGoのEchoでJaegerを使ってボトルネックを調査する という記事を書いてました。

X-Rayからは若干離れますが、OpenTracingな情報を知りたい方は上記も読んでみてくださいませ。

さて、話をX-Rayに戻すと、X-Rayを使うとTracing

img

Service Mapを作ることができます。

img

今回はService Mapで監視するような多段でマイクロサービスなアーキテクチャの監視はしませんが、さっそく、X-RayでLambdaのリクエストをTracingしていきましょう!

X-Rayを使う for Lambda (Python)

LambdaはPythonで作っていくことにします。

Lambda Layerを作って利用できるようにする

X-Rayを使うには、X-Rayクライアント(https://github.com/aws/aws-xray-sdk-python)をソースコード上で使えるようにするため、X-Rayを入れたLambda Layerを作っていきます。

ローカル上で

mkdir python

pip install aws-xray-sdk -t python/

zip -r python.zip python/

としてX-Ray Client入りのpython.zipを作ります。

そして、AWSコンソールのLambda Layersからアップロードします。

img

作ったLambda LayerはLambda関数にアタッチ(マージ)することで利用できるようになります。

Lambdaで外部APIをたたくため、RequestsのLambda Layerも作ってアタッチしてます。

img

Pythonコード実装

PythonでX-RayのTracingを使うには大きく2種類の方法があります。

  • xray_recorder
  • patch

xray_recorderはPython関数にデコレータとして設定することで、関数のIn/Outをキャプチャすることができます。

patchはRequestsBoto3などいくつかライブラリをPatchして、リクエストをTracingします。 今回はめんどくさいのでpatch対応しているライブラリに全部Patchするpatch_allを使います。

from aws_xray_sdk.core import xray_recorder # デコレータをつけた関数をキャプチャ
from aws_xray_sdk.core import patch_all # boto3やrequestsにX-Rayパッチを適用し、監視する

patch_all() # X-Rayパッチ

@xray_recorder.capture("hoge_function") # 関数キャプチャ
def hoge_function(hogeeee, hogeeee):
    hogehoge_logic(hogeeee)

さぁ、Lambdaのコードを無事に書き終えたらLambdaをデプロイして終わりです。

今回は手でLambdaを作りましたので、特にCIな話題はないです。すみません。

最後に、LambdaのコンソールからX-Rayを有効化することを忘れずに

img

これで無事にX-Rayが利用できるようになりました。

Lambdaが動くことでTracingされます。

img

Lambda単体なのでService Mapもショボいですができてます。

img

Datadog APMと連携する

X-RayはDatadogにも連携可能です。

早速Datadogに連携していきましょう。

DatadogがアクセスするRoleのポリシー設定

DatadogがあなたのアカウントにIntegrationするRoleにX-Rayの読み取り権限を追加します。

追加するポリシーは以下です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "XRay",
            "Effect": "Allow",
            "Action": [
                "xray:GetSamplingTargets",
                "xray:GetGroup",
                "xray:GetTraceGraph",
                "xray:GetServiceGraph",
                "xray:GetTimeSeriesServiceStatistics",
                "xray:GetEncryptionConfig",
                "xray:GetSamplingRules",
                "xray:GetGroups",
                "xray:GetTraceSummaries",
                "xray:GetSamplingStatisticSummaries",
                "xray:BatchGetTraces",
                "xray:PutEncryptionConfig"
            ],
            "Resource": "*"
        }
    ]
}

DatadogのAWS Integrationを確認

DatadogのWebコンソールから、X-Rayを取得する設定が入っているか確認します。入っていなければチェックして下さい。

img

これでAPMからX-Rayが使えるようになります。次のメトリック取得でAPMにTracing関連が追加されているはず。

img

APMからTracing情報を確認する

Serviceからダッシュボードの形で、APMに送られてくるTracingをパパっと見ることができます。

img

細かくみると、こんな感じでAPMからRequestの内訳やレイテンシーが確認できるようになっているはずです。

img

Service MapもDatadogから確認できますが、こちらはAWSのコンソールのほうが見やすいですね。

img

Monitorを設定する

APMのメトリックを使って、Monitorを作ることもできます。

例えば、P99のレイテンシーがxx秒を超えてきたらWarningなどにしておくと安心感あるかもですね。

img

結論

DatadogのAPMはLambda + X-Rayでも問題なく利用できる機能とわかりました。

もう少しX-Rayを使いこなせるように頑張りますね。

˚