一、概述
Amazon Web Services (AWS) 包含一百多種服務,每項服務都針對一個功能領域。服務的多樣性可讓您靈活地管理 AWS 基礎設施,然而,判斷應使用哪些服務以及如何進行預配置可能會非常困難。借助 Elastic Beanstalk,可以在 AWS 云中快速部署和管理應用程序,而不必了解運行這些應用程序的基礎設施。Elastic Beanstalk 可降低管理的復雜性,但不會影響選擇或控制。只需上傳應用程序,Elastic Beanstalk 將自動處理有關容量預配置、負載均衡、擴展和應用程序運行狀況監控的部署細節。
觀測云全面支持在 AWS Elastic Beanstalk 上的可觀測能力,提供包括對基礎資源的監控、應用程序鏈路跟蹤等。文章將介紹在該環境上如何接入 APM,如何安裝 datakit 等最佳實踐。
AWS Elastic Beanstalk 簡介
Elastic Beanstalk 支持在 Go、Java、.NET、Node.js、PHP、Python 和 Ruby 中開發的應用程序。在部署應用程序時,Elastic Beanstalk 會構建選定的受支持的平臺版本,并預配置一個或多個 AWS 資源(如 Amazon EC2 實例)來運行應用程序。可通過使用 Elastic Beanstalk 控制臺、AWS Command Line Interface (AWS CLI) 或 eb(專為 Elastic Beanstalk 設計的高級 CLI)與 Elastic Beanstalk 交互,還可以直接從 Elastic Beanstalk Web 界面(控制臺)執行大多數部署任務,如更改 Amazon EC2 實例隊列的大小或監控應用程序。
使用 Elastic Beanstalk,您需創建一個應用程序,將應用程序版本以應用程序源包的形式(如 Java .war 文件)上傳到 Elastic Beanstalk,然后提供一些有關該應用程序的信息。Elastic Beanstalk 會自動啟動環境,然后創建并配置運行代碼所需的AWS資源。啟動環境后,您即可管理環境并部署新應用程序版本。
下圖說明了 Elastic Beanstalk 的工作流程。
應用發布
開發者把自己開發好的包,上傳到 aws 上,Elastic Beanstalk 將文件部署到 Amazon EC2 實例上,完成應用的發布。
二、解決方案
監控數據采集說明
DataKit 是觀測云的一款開源、一體式的數據采集 OneAgent,它提供全平臺操作系統(Linux/Windows/macOS)的支持,擁有全面數據采集能力,涵蓋主機、容器、中間件、Tracing、日志等各種數據采集的能力。
在 AWS 環境中,將通過 DataKit 進行監控數據采集,并上傳到觀測云。
通過自定義環境變量配置
當創建 AWS Elastic Beanstalk 環境時,Elastic Beanstalk 會預置和配置運行和支持您的應用程序所需的全部 AWS 資源。除配置您的環境的元數據和更新行為外,還可以通過為配置選項提供值對這些資源進行自定義,可以通過配置項的方式,對黑盒子的環境進行自定義配置,解決兩個痛點:
- Amazon EC2 實例是托管的,無法進入服務器執行命令
- 應用程序啟動,由 Elastic Beanstalk 自動化,無法自己再添加 類似 java -jar 類似命令
修改后,Trace 上報邏輯如下:
三、最佳實踐
1. 創建安裝 datakit 的 config 文件
1.1 files 參數介紹
- mode:運行權限,此處給的是 755
- owner:用戶名
- group:組戶名
- source:文件來源
1.2 container_commands 參數介紹
- DK_DEF_INPUTS:由于無法進服務器修改 conf 文件,所有在安裝 datakit 時候開啟 ddtrace 采集器,本實踐中同時也開啟了 ddtrace, dk, cpu, disk, diskio, mem, swap, system, hostobject, net, host_processes, container 采集器
- DK_DATAWAY:網關,這里舉例為法蘭克福網關
- token:觀測云空間 token
1.3 config 文件模版
# .ebextensions/99datakit.config
option_settings:- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_APM_INSTRUMENTATION_ENABLEDvalue: "host"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_APM_INSTRUMENTATION_LANGUAGESvalue: "java"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_APM_INSTRUMENTATION_OUTPUT_PATHSvalue: "file:///tmp/host_injection.log"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_APPSEC_ENABLEDvalue: "true"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_CONFIG_SOURCESvalue: "BASIC"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_ENVvalue: "apipro"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_PROFILING_ENABLEDvalue: "true"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_SERVICEvalue: "RydeApiPro"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_SYSTEM_PROBE_PROCESS_SERVICE_INFERENCE_ENABLEDvalue: "true"- namespace: aws:elasticbeanstalk:application:environmentoption_name: DD_VERSIONvalue: "1.0"files:"/datakit_install_script.sh":mode: "000755"owner: rootgroup: rootsource: https://static.guance.com/datakit/install.shcontainer_commands:setup_datakit:command: "DK_DEF_INPUTS='ddtrace,dk,cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container‘ DK_DATAWAY=’https://eu1-openway.guance.one?token=xxxxx‘ /datakit_install_script.sh"
1.4 配置文件上傳后,update 即可生效
在觀測云-基礎設施可以看到服務器運行狀態,表示安裝完成。
2. 接入APM
2.1 參數介紹
dd.env
?: 為服務設置環境變量,對應環境變量 DD_ENV。dd.version
?: APP 版本號,對應環境變量 DD_VERSION。dd.service.name
?: 設置服務名,對應環境變量 DD_SERVICE。dd.trace.agent.timeout
?: 客戶端網絡發送超時默認 10s,對應環境變量 DD_TRACE_AGENT_TIMEOUT。dd.logs.injection
?: 是否開啟 Java 應用日志注入,讓日志與鏈路數據進行關聯,默認為 true,對應環境變量 DD_LOGS_INJECTION。dd.tags
?: 為每個 Span 添加默認 Tags,對應環境變量 DD_TAGS。dd.agent.host
?: Datakit 監聽的地址名,默認 localhost,對應環境變量 DD_AGENT_HOST。dd.trace.agent.port
?: Datakit 監聽的端口號,默認 9529,對應環境變量 DD_TRACE_AGENT_PORT。dd.trace.sample.rate
?: 設置采樣率從 0.0(0%) ~ 1.0(100%)。dd.jmxfetch.enabled
?: 開啟 JMX metrics 采集,默認值 true, 對應環境變量 DD_JMXFETCH_ENABLED。dd.jmxfetch.config.dir
?: 額外的 JMX metrics 采集配置目錄。Java Agent 將會在 yaml 配置文件中的 instance section 尋找 jvm_direct : true 來修改配置,對應環境變量 DD_JMXFETCH_CONFIG_DIR。dd.jmxfetch.config
?: 額外的 JMX metrics 采集配置文件。JAVA agent 將會在 yaml 配置文件中的 instance section 尋找 jvm_direct : true 來修改配置對應環境變量,DD_JMXFETCH_CONFIG。dd.jmxfetch.check-period
?: JMX metrics 發送頻率(ms),默認值 1500,對應環境變量 DD_JMXFETCH_CHECK_PERIOD。dd.jmxfetch.refresh-beans-period
?: 刷新 JMX beans 頻率(s),默認值 600,對應環境變量 DD_JMXFETCH_REFRESH_BEANS_PERIOD。dd.jmxfetch.statsd.host
?: Statsd 主機地址用來接收 JMX metrics,如果使用 Unix Domain Socket 請使用形如 unix : //PATH_TO_UDS_SOCKET 的主機地址。默認值同 agent.host ,對應環境變量 DD_JMXFETCH_STATSD_HOST。dd.jmxfetch.statsd.port
?: StatsD 端口號用來接收 JMX metrics ,如果使用 Unix Domain Socket 請使填寫 0。默認值同 agent.port 對應環境變量 DD_JMXFETCH_STATSD_PORT。
2.2 config 模版
# .ebextensions/tomcat.config
option_settings:aws:elasticbeanstalk:container:tomcat:jvmoptions:JVM Options: '-javaagent:/usr/local/datakit/data/dd-java-agent.jar -Ddd.logs.injection=true -Ddd.service=rydewebdev -Ddd.env=rydewebdev -Ddd.version=1.0.8'
2.3 配置文件上傳后,update 即可生效
在觀測云-應用性能監測,可以看到服務鏈路上報,表示成功。
四、觀測云上效果展示
當完成上面所述的配置,并在 AWS 上成功啟動任務后,我們就可以通過觀測云全面監控 AWS 中的服務運行情況。使用效果說明如下:
1. 關于指標
針對主機系統主機層面的監控,幫助快速查看所有主機的健康和資源使用狀況,可以以蜂窩圖、時序圖等多種形式進行展現,同時可以查看所有主機對應的進程,及時發現問題,第一時間定位并解決問題。
2. 關于服務鏈路
在鏈路查看器,您可以通過點擊任意鏈路查看對應的鏈路詳情,包括當前鏈路發生的相對時間、持續時間、HTTP 方法、HTTP URL 、HTTP 狀態碼、TraceId、火焰圖、Span 列表、服務調用關系以及關聯的日志、主機、指標、網絡等等。
火焰圖可清晰展示整條鏈路中每個 Span 的流轉和執行時間。您可以在火焰圖右側查看對應的服務列表及響應時間。點擊火焰圖的 Span,在鏈路詳情可查看對應的 Json 內容,通過鼠標滾軸縮放可查看具體 Span 信息。
觀測云根據您采集的數據,為您提供默認的應用性能概覽視圖,在應用性能監測 > 概覽中,您可以查看:
- 統計數據:包括在線服務總數、P90 服務響應耗時、服務最大響應耗時、服務錯誤數、服務錯誤率;
- 響應耗時排行榜 TOP 10:包括 P90 服務、資源、操作;
- 錯誤分布排行榜 TOP 10:包括服務錯誤率、資源 5xx 錯誤率、資源 4xx 錯誤率