Elastic的CI/CD全观测解决方案

CI/CD 可观测性

为了帮助管理员监控 CI/CD 平台并对其进行故障排除,并帮助开发人员提高 CI/CD 管道的速度和可靠性,Elastic Observability 提供了持续集成和持续交付 (CI/CD) 流程的可见性。

为了在管道上提供监控仪表板、警报和根本原因分析,Elastic 与最流行的 CI/CD 平台的社区合作,使用 OpenTelemetry 检测工具。

CI/CD 可观测性架构

使用 APM 服务器,将所有 OpenTelemetry 原生 CI/CD 观测工具直接连接到 Elastic Observability。

Jenkins Provisioning KPIs in Elastic Observability

Elastic Observability 中的 Jenkins 管道构建错误

错误概览屏幕提供 捕获的CI 构建异常的高级视图。类似的错误被分组以快速查看哪些错误正在影响您的服务并允许您采取行动来纠正它们。

Elastic Observability 中的 Jenkins 作业和管道错误

将 CI 管道执行编制为 Elastic Observability 中的跟踪

开发人员的可观测性

开发团队需要不断优化他们不断变化的 CI/CD 管道,以提高其可靠性,同时追求更快的管道。将管道可视化为分布式跟踪有助于记录正在发生的事情并提高性能和可靠性(不稳定的测试和管道)。

通过将 OpenTelemetry 与许多流行的 CI/CD 和 DevOps 工具(如 Maven 或 Ansible)集成,Elastic Observability 通过提供对 CI/CD 管道执行的深入见解来解决这些问题。

CI/CD 管道可见性

在 Elastic Observability 中将 CI/CD 管道可视化为分布式跟踪,提供所有管道的事件和运行状况指标。

Elastic Observability 中的 APM 服务视图提供了所有已埋点的 CI/CD 服务的视图,其中包含有关其 KPI 的见解。

Jenkins 管道构建为 Elastic Observability 中的跟踪

要进一步调查,您可以查看以Labels的方式添加到构建中的上下文详细信息。

这种更高级的设置需要将 Jenkins 控制器连接到 Elasticsearch,并且需要对logs-apm.app以及最好对该索引模板的ILM策略(默认是logs-apm.app_logs-default_policy策略)的Metadata具有读取权限。使用“Validate Elasticsearch configuration”来验证设置。

用于在 Elastic 中存储管道日志并在 Elastic 和 Jenkins 中可视化日志的架构

仅在 Kibana 中可视化日志

仅在 Kibana 中可视化日志涉及更简单的设置,不需要从 Jenkins 控制器访问 Elasticsearch。这是因为 Jenkins 管道构建控制台显示了指向 Kibana 日志可视化的超链接,而不是在 Jenkins UI 中显示日志。

用于在 Elastic 中存储管道日志并在 Elastic 中专门显示日志的架构

埋码 CI/CD 管道

观察 CI/CD 管道是通过埋码不同的 CI/CD 和 DevOps 工具来实现的。Elastic 与开源社区合作,利用 OpenTelemetry 提供最佳覆盖范围。

Jenkins

安装 OpenTelemetry 插件
  1. 在 Jenkins UI 上,转到Manage Jenkins > Manage Plugins

  1. 单击Available选项卡,然后搜索OpenTelemetry
  2. 选择OpenTelemetry复选框,然后单击Download now and install after restart
    要验证插件是否已安装,请单击Installed选项卡,然后搜索OpenTelemetry Plugin
配置 OpenTelemetry Plugin

OpenTelemetry 插件需要配置为向 OpenTelemetry 服务报告数据。此外,您还需要 OpenTelemetry 服务的端点、身份验证类型和访问凭证。

  1. 在 Jenkins UI 上,转到Manage Jenkins > Configure System
  2. 转到 OpenTelemetry 插件部分。
  3. 使用 Elastic APM 服务器 URL 和 APM 服务器身份验证配置您的 OpenTelemetry 端点和身份验证:
    - 如果使用 Elastic APM secret令牌授权,请选择Bearer Authentication Token,并将令牌添加为 Jenkins secret文本凭证。

    在这里插入图片描述
  4. 如果使用 Elastic API Key 授权,请定义Header Authentications
- Header name::`"Authorization"`
- Header value:一个秘密文本凭证,值为`"ApiKey an_api_key"`(`an_api_key`是密钥的值)
  1. 转到Add Visualisation Observability Backend并输入Kibana的地址。

执行 Maven 构建的 Jenkins 管道

要了解更多信息,请参阅Maven 构建与 Elastic Observability 的集成

Ansible

Ansible OpenTelemetry 插件集成提供对所有 Ansible Playbook的可见性。该插件会为每次运行和性能指标生成跟踪,以帮助您了解哪些 Ansible 任务或角色运行最多、失败的频率以及完成所需的时间。

您可以使用Ansible OpenTelemetry 回调插件配置您的 Ansible playbook 。需要安装 Opentelemetry python 库并按照示例部分中的说明配置回调。

来自 Jenkins 作业或管道的上下文传播被传递到 Ansible 运行。因此,CI 中发生的所有事情也会显示在跟踪中。

对 Ansible playbook的可见性

此集成提供开箱即用的服务地图,其中包含连接到 Ansible Playbook 的所有服务。所有这些功能可以帮助你快速、直观地评估你在配置和持续部署中使用的服务。

Pytest 测试的可见性

Concourse CI

要配置 Concourse CI 以发送跟踪,请参阅跟踪文档。在 Concourse 配置中,您只需要定义CONCOURSE_TRACING_OTLP_ADDRESSCONCOURSE_TRACING_OTLP_HEADERS

CONCOURSE_TRACING_OTLP_ADDRESS=elastic-apm-server.example.com:8200
CONCOURSE_TRACING_OTLP_HEADERS=Authorization=Bearer your-secret-token

支持上下文传播;因此,您可以从上述集成中受益。

配置 Concourse CI 跟踪后,Concourse CI 管道执行将可在 Elastic Observability 中观测。

通过调用KIBANA_URL/internal/apm/services API执行健康检查,将新部署实例上的服务的交易错误率与阈值进行比较。向调用传递以下参数。:

  • startend: 使用ISO-8601格式的时间间隔(例如“2021-09-01T13:24:12Z”,UTC 时间)
  • kuery:用于过滤服务名称,例如,正在部署的新版本,将范围缩小到金丝雀实例。例子service.name:"MY_SERVICE_NAME" AND service.version:"1.2.3"
  • environment:部署金丝雀实例的环境。比如:production

要定义时间范围,使用startend参数。这些参数是ISO-8601格式的日期。要想只查询一个服务,在参数kuery中组合一个过滤器,然后用表达式`service.name:MY_SERVICE_NAME

and service.version: SERVICE_VERSION来过滤服务。最后通过传递environment参数来应用一个环境过滤器。要选择所有环境,使用ENVIRONMENT_ALL`。

API 调用需要身份验证。我们建议使用 API Token 进行身份验证。

API 可能会发生变化,针对持续交付用例优化的稳定 API 即将发布。

def check_service_health(service_name, service_version, error_rate_threshold, kibana_url, api_token):
    now = datetime.now()
    five_minutes_ago = now - timedelta(minutes=5)
    params = {
        "start": five_minutes_ago.strftime("%Y-%m-%dT%H:%M:%SZ"),
        "end": now.strftime("%Y-%m-%dT%H:%M:%SZ"),
        "kuery": "service.name:{} and service.version:{}".format(service_name, service_version),
        "environment": "ENVIRONMENT_ALL"
    }
    url = "{}/internal/apm/services?{}".format(kibana_url, urllib.parse.urlencode(params))
    req = urllib.request.Request(url=url, headers={"Authorization": "Bearer {}".format(api_token)})
    with urllib.request.urlopen(req) as response:
     body = response.read().decode("utf8")
     obj = json.loads(body)
     if len(obj['items']) > 0 and obj['items'][0].transactionErrorRate > error_rate_threshold:
            raise Exception("Error rate for service {} is higher than threshold {}, current value is {}".format(service_name, error_rate_threshold, obj['items'][0].transactionErrorRate))
本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Elastic的CI/CD全观测解决方案
为了帮助管理员监控 CI/CD 平台并对其进行故障排除,并帮助开发人员提高 CI/CD 管道的速度和可靠性,Elastic Observability 提供了持...
<<上一篇
下一篇>>