APM Server 的定位,是用来专门收集 APM Agents 所发送的资料,身为同样是收集资料的服务之一,APM Server 被 Elastic 归类在 Beats 的生态圈之中,因此 APM Server 就是使用 libbeat
所开发出来的产品,如此一来 APM Server 就拥有 Beats framework 所开发出来针对资料收集处理的各种能力与机制。
以下安装的步骤,以自行安装於 MacOS
环境为例:
curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.15.0-darwin-x86_64.tar.gz
tar xzvf apm-server-7.15.0-darwin-x86_64.tar.gz
./apm-server setup --index-management
apm-server setup --pipelines
这个指令可以省略,预设 APM Server 启动时就会执行,当然也可以手动先设定好。
在 apm-server.yml
中调整合适的配置设定。
启动 APM Server
./apm-server -e
在使用 APM Server 时,在 apm-server.yml
有一些设定值可能会需要调整:
output.elasticsearch
:指定 Elasticsearch 的主机位置,或是 Security 相关的设定。queue.mem.*
:Queue 的大小,如果 APM 收集的资料量较大、并且 APM Server 也配置较好的硬体规格时,这部份应该要有对应的调整。max_procs
:如果对於 APM Server 能使用的 CPU 数量有要进行限制或调整的话,在此设定。app-server.rum.enable
:如果要开启 RUM (Real User Monitoring) 的功能,要特别设定启用。(预设是关闭)apm-server.kibana.*
:如果要透过 Kibana 来控制 APM Agents 的话,会需要设定这些配置。logging.*
:要收集 APM 产生的 Logs 档的话,要设定启用写入档案,一般建议会启用并配合 Filebeat 来收集 APM Server 的 Logs。http.*
:如果我们要透过 Metricbeat 收集 APM Server 的 Metrics 时,会需要启用 HTTP Endpoint,提供 Metricbeat 取得内部 Metrics 的 API。apm-server.auth.anonymous.*
:当 RUM 设定启用时,这个设定值也会自动被启用,有些 rate_limit
的设定在量级较大的环境可能会需要被重新检视设定。APM Server 定义了一个 Events Intake
的 API,而 APM Agents 主要也就是使用这个 API,将我们先前介绍到的以下四种资料传送给 APM Server:
Intake
API 的 Endpoint 如下:
http(s)://{hostname}:{port}/intake/v2/events
RUM 有另外独立的 Endpoints:
http(s)://{hostname}:{port}/intake/v2/rum/events
存取这个 API 使用的是 HTTP POST
,并且如同 Elasticsearch _bulk
API 的设计一样,使用 newline delimited JSON (NDJSON) 的 Content-Type
来接收一次多笔 Events 的传送,同时在回传结果若有错误时,也会回传每一个 Events 及独立的错误资讯。
官方文件 - APM Events API 里面有详细的介绍四种资料各自的 Schema,有兴趣的读者可以参考。
针对 APM Server 的效能调校,这边参考官方文件的介绍,有包含以下几点:
output.elasticsearch
的参数包含以下三种调整方式:
output.elasticsearch.worker
的数量。output.elasticsearch.bulk_max_size
的数量,预设值 50
是蛮小的一个数字,如果硬体规格还不错,甚至可以调高到 5120
来试试。queue.mem.events
的数量有被正确的设定是 output.elasticsearch.worker
* output.elasticsearch.bulk_max_size
的大小。透过调整 queue.mem.events
的大小,在 APM Server 使用更多的记忆体来缓存 APM Agents 所传送进来的资料,如果为了能承受 Elasticsearch 发生一段时间无法正常运作,又要保持 APM Server 能接受 APM Agents 不断传送进来的资料时,可以从这边下手。
如果发生 request timeouts 的错误时,通常是因为 APM Server 处理不了当下的资料量了,这时最简单且有效的方式,就是增加 APM Server 的数量。
这部份要从 APM Agents 端下手,如果一次传送到 APM Server 的资料量太大,有可能会发生 Request timeout,这时可以调小 flush interval
的设定,或甚至是降低 sample rate
(取样率)。
当 APM Server 处理的量已经消化不完的时候,透过从 Intake
API 进行节流,设定 rate_limit.event_limit
来限制一次能进来的资料量,能帮助 APM Server 有效的处理他能处理的资料量,整体的效能使用率会更佳。
预设 APM Server 建立的 ILM (Index Lifecycle Management) Policy 没有包含删除资料、或移到 Cold phase 等操作,这部份记得在使用 APM 时,也一样要做好资料管理的规划,避免 Elasticsearch 的资料随时间不断增长,最终导致资料量过多而影响服务的正常使用。
查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!
<<: EP20 - [Ruby on Rails] 捐款网站
>>: Day22_控制项(A17营运持续管理之资讯安全层面)-2021/10/05
前言:昨天介绍完了二元树的两种储存方式,今天要来介绍如何读取二元树,称之为走访,而走访方式就有大约四...
今天来分享一下我自己如何除错,出错很正常(对我来说啦QWQ),但是发现有错,很重要的是,要知道自己错...
大多数普通媒体播放器都无法播放蓝光ISO档、蓝光光盘以及BD资料夹。在这篇文章中,我将重点介绍市场上...
在Grails 里建立 controller 是一件很愉快、简单的事情。基本上,你无须使用任何 an...
students 资料表 s_id name gender age 1 Amy female 18 ...