如何使用Elasticsearch实现可观察性

可观察性的概念已经存在了数十年,但它在IT基础架构领域是一个相对较新的概念。 那么在这种情况下可观察性是什么? 状态是拥有有关系统内部的所有信息的状态 ,因此,当发生问题时,您可以查明问题并采取正确的措施加以解决。

注意我说的是状态 。 可观察性不是一个工具或一组工具,而是我们正在管理的系统的属性。 在本文中,我将逐步介绍如何计划和实施可观察的部署,包括API测试以及日志,指标和应用程序性能监视(APM)数据的收集。 我还将指导您参加许多免费的,自定进度的培训课程,这些课程将帮助您开发使用Elastic Stack实现可观察系统所需的技能。

[ 也在InfoWorld上:站点可靠性工程遇上发展难题的地方 ]

可观察性的三个步骤

这是本文介绍的可观察性的三个步骤:

  1. 计划成功
    1. 收集需求
    2. 识别数据源和集成
  2. 部署Elasticsearch和Kibana
  3. 从系统和服务中收集数据
    1. 日志
    2. 指标
    3. 应用程序性能管理
    4. API综合测试

计划成功

在过去的二十年中,我一直在进行故障和性能管理。 以我的经验,要可靠地达到可观察的状态,您必须在开始之前做作业。 以下是我为成功建立部署所采取的一些步骤的简要清单:

目标:与所有人交谈并写下目标

与您的利益相关者交谈并确定目标:“我们将知道用户在使用我们的服务方面是好事还是坏事;” “该解决方案将通过提供分布式跟踪来改善根本原因分析;” “当您在深夜给我传呼时,您会给我我发现问题所需的信息;” 等等

数据:列出所需的数据以及谁拥有的数据

列出支持目标所需的必要信息(数据和元数据)的列表。 超越IT信息而思考-包括需要的任何数据以了解正在发生的事情。 例如,如果Ops在其工作流程中检查天气频道,则可以考虑将天气数据添加到所需信息列表中。 窥探最好的问题解决者的桌子,找出他们在停电期间正在看的东西(以及他们如何喜欢咖啡)。 如果您的组织进行了验尸,请查看人们带入会议室的数据。 如果在一次指责的会议上确定根本原因很有价值,那么在停运之前在Ops中就更有价值了。

修复:考虑可以加快速度的解决方案和信息

如果Ops需要主机名,Runbook,一些资产信息和进程名称来解决此问题,则可以在可观察性解决方案中使用这些数据,并在分页时将其发送出去。 将所需的信息位添加到上一步中启动的列表中。

一个好的起点

此时,您已拥有所需的数据列表,以便在出现问题时可以查明问题并采取正确的措施加以解决。 该列表可能如下所示:

服务数据

  • 我的服务的用户体验数据
    • 每个事务的应用程序响应时间以及组成应用程序的组件(例如,前端和数据库)
    • 通过综合测试获得适当的API功能
  • 我的基础架构的性能数据
    • 操作系统指标
    • 数据库指标
  • 来自服务器和应用程序的日志

入站集成

  • 过去事件的历史
  • Runbooks
  • 资产信息
  • 天气或其他“非IT”数据

出站集成

  • 事件管理集成以发出警报

弹性可观察性

弹性堆栈-Elasticsearch,Kibana,Beats和Logstash; 以前称为ELK Stack-是一组功能强大的开源工具,用于实时搜索,分析和可视化数据。 Elastic Stack被广泛用于集中来自操作系统的日志。 随着时间的推移,Elastic增加了用于指标,APM和正常运行时间监视的产品,这是Elastic Observability解决方案。

Elastic Observability的价值在于它将所需的所有类型的数据汇总在一起,以帮助您做出正确的操作决策并实现可观察性状态。 让我们跳入一个场景来演示如何将Elastic Observability付诸实践。

弹性可观察性01 有弹性

情境

我有一个简单的应用程序要管理。 它由运行在Google Cloud Platform中Linux VM上的Spring Boot应用程序组成。 该应用程序公开了两个API端点,并具有MariaDB后端。 您可以在Spring Guides中找到该应用程序。 我已经在Elastic Cloud中创建了Elasticsearch Service部署,并且我将按照在Elasticsearch分析和管理UI的Kibana中的代理安装教程进行操作。 将使用的开源代理是:

  • 日志文件拍
  • 指标的Metricbeat
  • 用于API测试和响应时间监控的心跳
  • Elastic APM Java代理,用于应用程序的分布式跟踪

注意:本指南是针对基于Spring Boot和MySQL的特定应用程序编写的。 如果您还有其他要从中收集日志,指标和APM跟踪的信息,则应该能够修改这些说明以执行所需的操作。 当您打开Kibana时,您将获得一整套现成的可观察性集成列表。

实作

在本文中,我将介绍完成基础知识的步骤,然后在以后的文章中,我将深入探讨最佳实践和某些集成。 让我们来看一个简单的部署。

托管的Elasticsearch服务

要遵循本指南,请在Elastic Cloud上的Elasticsearch Service中创建部署(免费试用版帐户)。 注册后,请在3分钟或更短的时间内观看并按照Deploy Elasticsearch中的步骤进行操作。 几分钟后,您将拥有一个集群,可以用来跟随本文的其余部分。 下载提供给您的密码; 您将使用它来登录Kibana并配置Beats。 屏幕快照来自Elastic Stack的7.6版-根据您的版本,您的UI可能看起来略有不同。

弹性可观察性02 有弹性

如果忘记了密码,请重设密码:

弹性可观察性03 有弹性

基巴纳

Kibana是Elastic Stack的可视化和管理工具。 Kibana将指导我们安装和配置Beats and Elastic APM Java Agent。

从部署详细信息启动Kibana,然后使用弹性用户名和密码登录:

弹性可观察性04 有弹性

您可以在Kibana实例中找到有关需要安装的所有内容的说明。 通常,在接下来的几页中,我会将您定向到Kibana Home; 您可以通过单击任何Kibana页面左上角的Kibana图标到达那里。

弹性可观察性05 有弹性

添加集成

这是将要收集的清单:

  • 来自基础架构和MariaDB的日志
  • 来自基础架构和MariaDB的指标
  • API测试结果和响应时间测量
  • 应用程序(包括数据库)的分布式跟踪

Kibana会指导您添加日志,指标和APM。 该视频显示了如何添加MySQL日志,一旦您知道如何做,就可以按照相同的过程添加指标和APM数据。

来自我的基础架构和MariaDB的日志

MariaDB和MySQL均提供日志。 我对错误日志和慢速日志感兴趣。 默认情况下,不会生成慢日志。 要配置这些日志,请查看MariaDB文档 。 对于我的部署,配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf 。 以下是相关部分:

# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
slow_query_log
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Enable the slow query log to see queries with especially long duration
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 0.5
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
#log-queries-not-using-indexes

要启用慢速查询日志,请取消注释慢速查询部分中的行,并根据需要调整较长的查询时间(默认为十秒)。

对配置的快速测试是使用SELECT SLEEP()强制执行慢速查询:

$sudo -- sh -c 'echo "select sleep(2);" | mysql'

sleep(2)
0

这导致一条记录被添加到慢日志中:

# Time: 200427 15:19:59
# User@Host: root[root] @ localhost []
# Thread_id: 13  Schema:   QC_hit: No
# Query_time: 2.000173  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 0
# Rows_affected: 0
SET timestamp=1588000799;
select sleep(2);

安装Filebeat

请遵循Kibana主页>添加日志数据> MySQL日志中的指示。 当指示您启用和配置mysql模块时,请参考以下详细信息以获取其他信息:

  • filebeat modules enable命令采用模块列表,因此保存一些步骤,并将systemauditd添加到列表中:
    sudo filebeat modules enable mysql system auditd
  • 当指示您修改d / mysql.yml文件中的设置时,请注意我添加的慢日志不在默认位置,因此请编辑文件modules.d / mysql.yml并指定慢日志的位置作为var.paths数组中的var.paths
- module: mysql
  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

  # Slow logs
  slowlog:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
            - /var/log/mysql/mariadb-slow.log

运行设置命令并按照Kibana>添加日志数据> MySQL日志中的指示启动Filebeat。 该页面底部是指向MySQL仪表板的链接。 您还应该查看[Filebeat System] Syslog dashboard ECS[Filebeat System] Sudo commands ECS仪表板。 您可以在仪表板列表中搜索这些:

弹性可观察性06 有弹性

API测试结果和响应时间测量

为了衡量API端点的正常功能,我们需要发布一些URL编码的数据,读取响应并进行验证。 这通常是通过使用curlPostman API Client手动完成的。 通过使用心跳线自动执行测试,响应时间和测试结果与日志,APM和服务的其他指标一起提供。 Heartbeat通过测试API端点的正确响应,检查网站的内容和响应代码,验证ICMP ping等来监视服务的可用性。

安装心跳

请遵循Kibana主页>添加指标数据>正常运行时间监视器中的说明。 当指示您编辑heartbeat.yml文件中的heartbeat.monitors设置时,请使用此API测试替换现有的监视器:

# Configure monitors inline
heartbeat.monitors:
- type: http
  name: SpringToDoApp
  schedule: '@every 5s'
  urls: ["http://roscigno-obs:8080/demo/add"]
  check.request:
    method: POST
    headers:
      'Content-Type': 'application/x-www-form-urlencoded'
    body: "name=first&email=someemail%40someemailprovider.com"
  check.response:
    status: 200
    body:
      - Saved
      - saved
  response.include_body: 'always'

运行安装程序命令,然后按照Kibana>添加度量标准数据> MySQL度量标准中的指示启动Metricbeat。 该页面底部是Uptime App的链接。

弹性可观察性07 有弹性

弹性可观察性08 有弹性

应用程序(包括数据库)的分布式跟踪

Elastic APM会为您的应用程序提供工具,以将性能指标发送到Elasticsearch,以使用APM应用程序在Kibana中进行可视化。 通过将APM jar文件添加到用于启动应用程序的命令中,我得到了分布式跟踪,因此我可以看到我的应用程序在哪里花费时间(无论是在Java代码中还是在对MariaDB的调用中)。

该过程在Kibana主页>添加APM> Java中提供,该过程包括下载jar文件并使用Java工具API启动代理。

弹性可观察性09 有弹性

我更喜欢使用环境变量,因此我将使用提供的详细信息并设置环境变量:

$cat environment
export
ELASTIC_APM_SERVER_URL=https://1530f7c8afdf402eb281750f0b127bc4.apm.us-central1.gcp.cloud.es.io:443

export ELASTIC_APM_SECRET_TOKEN=WjyW67R0eSWDhILWDD

export ELASTIC_APM_SERVICE_NAME=winter-mysql

export ELASTIC_APM_APP_PACKAGES=com.example

我通过./mvnw spring-boot:run启动应用程序,并在Maven包装器中获取环境变量:

exec "$JAVACMD" \
  -javaagent:./elastic-apm-agent.jar \
  -Delastic.apm.service_name=${ELASTIC_APM_SERVICE_NAME:-demo-app} \
  -Delastic.apm.server_url=${ELASTIC_APM_SERVER_URL} \
  -Delastic.apm.secret_token=${ELASTIC_APM_SECRET_TOKEN} \
  -Delastic.apm.application_packages=org.example \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"

一旦启动应用程序,先前使用Heartbeat设置的API测试将在Elasticsearch中产生跟踪:

弹性可观察性10 有弹性

翻译自: https://www.infoworld.com/article/3562583/how-to-implement-observability-with-elasticsearch.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值