应用程序性能监测 (APM) 和日志均为您的生态系统提供关键洞见。当与上下文结合在一起时,它们可提供有关如何解决应用程序问题的重要线索。
随着您分析的日志数据日渐复杂,使用传统工具导航到相关部分可能会很棘手。借助 Elastic 可观测性(由 Elastic Stack 提供支持),在 Kibana 中单击几下即可将日志与 APM 关联起来,轻松便捷。在 Web 应用中轻松查看与用户针对特定事务提出的特定请求相关的日志。
在 Elastic APM 中查看跟踪日志
下方是 Elastic APM 的截图,显示了特定事务中涉及的所有操作的详细分解。如果单击 Actions(操作):
然后选择 Show trace logs(显示跟踪日志):
大功告成:
这些消息是与此特定事务有关的额外详细信息。此类详细信息不适合 APM 或任何其他类型的监测,因此实际上只能由日志提供。现在,由于 Elastic Stack 将这些不同监测方面整合在一起,我们可以非常灵活地向事务添加额外详细信息。将这些不同类型的数据存储在同一个数据存储中,使我们可以快速地对调查进行透视。
安装并配置 Elastic APM Python 代理
您可能会说,“这确实很棒,但是我怎么才能在我的系统中达到相似的效果?”
让我们看一个示例,逐步了解如何将日志和 APM 跟踪信息整合到一起。以下是上方截图中显示的 Python 应用的相关代码。必须找到一种方法,向用户对应用发出的每个请求添加信息。
首先,我们需要安装最基本的 Elastic APM Python 代理。将其添加为依赖项。这是一个 Flask 应用,所以在依赖项名称后的方括号里显示 [flask]
(每个受支持框架的详细信息均可以在 Python 代理文档中找到)。
# 在 requirements.txt 中 elastic-apm[flask]==5.3.3
首先准备好正确的 import 语句:
# 在 app.py 中 import logging from elasticapm.contrib.flask import ElasticAPM from elasticapm.handlers.logging import Formatter
然后,配置 Python 代理,向 APM 服务器发送信息:
# 在 app.py 中 app = Flask(__name__) # 照常初始化应用 app.config['ELASTIC_APM'] = { 'SERVICE_NAME': 'foodbankhero', # 设置自定义 APM 服务器 URL(默认:http://localhost:8200) 'SERVER_URL': 'http://localhost:8200' # APM 服务器需要令牌时使用 # 可以将 APM 服务器配置为需要令牌以确保安全性,以防第三方使用随机数据发动洪水攻击。 # 'SECRET_TOKEN': '' } apm = ElasticAPM(app) # 将 Flask 应用与 APM 关联在一起的神奇代码行
配置日志
现在,让我们来配置日志,使其可以如上方截图所示与 APM 跟踪信息相关联:
# 在 app.py 中 fh = logging.FileHandler('foodbankhero.log') # 我们之前从 Python 代理导入了自定义格式化程序 formatter = Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") fh.setFormatter(formatter) logging.getLogger().addHandler(fh) # … 应用中的某个隐蔽位置 ... logging.getLogger().info(‘Foodbank {} needs {} items’.format(id, len(items))) logging.getLogger().info(‘Returning {} foodbank records’.format(len(results)))
以下是您的日志现在将如何呈现的样例:
2020-05-12 01:57:14,029 - flask.app - INFO - 172.22.0.1 - - [12/May/2020 01:57:15] "GET / HTTP/1.1" 200 - | elasticapm transaction.id=f31f884b961a6089 trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None
这样设置之后,每个请求的每个日志行都将增加跟踪信息,甚至包括静态资产的请求(在将应用配置为支持静态资产的情况下)。例如:
2020-05-12 01:57:14,029 - werkzeug - INFO - 172.22.0.1 - - [12/May/2020 01:57:14] "GET /favicon.ico HTTP/1.1" 404 - | elasticapm transaction.id=f31f884b961a6089 trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None
亲身体验 Elastic APM
准备好打破传统的孤岛,利用上下文更快地解决问题了吗?运用 Elastic 可观测性,您可以轻松便捷地关联数据并以极快的速度导航到您需要的内容。
了解 Elastic APM 入门的简单方法 - 只需在您的项目中添加几行代码,即可开始向 Elasticsearch 发送数据。通过 Elastic Cloud 上的免费试用,亲身体验将您的日志与 APM 关联起来。