余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

当 Pod 崩溃后如何在报警信息中获取对应的日志信息?

xiyangw 2023-05-14 12:00 12 浏览 0 评论

Robusta 是一个 Python 开发的用于 Kubernetes 故障排除的开源平台。它位于你的监控堆栈(Prometheus、Elasticsearch 等)之上,并告诉你警报发生的原因以及如何修复它们。

Robusta 包含三个主要部分,全部开源:

当 Pod 崩溃后如何在报警信息中获取对应的日志信息?

  1. 用于 Kubernetes 的自动化引擎
  2. 内置自动化以丰富和修复常见警报
  3. 其他一些手动故障排除工具

还有一些其他额外的可选组件:

  1. 包含 Robusta、Prometheus Operator 和默认 Kubernetes 警报的工具包
  2. 用于查看集群中所有警报、变更和事件的 Web UI。

Robusta 会自动执行部署应用程序后发生的所有事情。它有点像用于 DevOps 的 Zapier/IFTTT,强调的是预置的自动化,而不仅仅是“构建你自己的”。例如,当 Pod 崩溃的警报触发时,下面的自动化程序也会将日志发送到 Slack:

triggers:
  - on_prometheus_alert:
      alert_name: KubePodCrashLooping
actions:
  - logs_enricher: {}
sinks:
  - slack

每个自动化程序都包含3个部分:

  • Triggers:何时运行(基于警报、日志、变更等)
  • Actions:要做什么操作(超过50个内置操作)
  • Sinks:将结果发送到何处(Slack等)

架构

Robusta 可以通过 Helm 进行安装和管理。

云原生生态圈专注云原生、运维、Go、Python技术分享。126篇原创内容

公众号

自动化引擎

Robusta 的主要组件是自动化引擎,它作为两个 Kubernetes Deployments 在集群内运行。

  • robusta-forwarder:连接到 APIServer 并监控 Kubernetes 的变化,将它们转发给 robusta-runner
  • robusta-runner:执行 playbooks。

打包的 Prometheus 堆栈(可选)

Robusta 包括一个可选的嵌入式 Prometheus 堆栈,根据最佳实践预先配置了 Kubernetes 警报。如果已经在使用 kube-prometheus-stack,则可以将其指向 Robusta。

Web UI(可选)

有一个 Web UI,它提供一个单一的管理面板来监控跨多个集群的所有警报和 pod。

CLI(可选)

robusta 的命令行工具有两个主要用途:

  1. 通过自动生成 Helm values 使安装 Robusta 变得更容易
  2. 手动触发 Robusta 故障排除工作流程(例如从任何 Java pod 获取 heap dump)

它还具有开发 Robusta 本身有用的一些功能。

使用场景

Robusta 默认情况下会监控下面这些报警和错误,并会提供一些修复建议。

Prometheus Alerts

  • CPUThrottlingHigh - 显示原因和解决方法
  • HostOomKillDetected - 显示哪些 Pods 被 killed 掉了
  • KubeNodeNotReady - 显示节点资源和受影响的 Pods
  • HostHighCpuLoad - 显示CPU使用情况分析
  • KubernetesDaemonsetMisscheduled - 标记已知错误并建议修复
  • KubernetesDeploymentReplicasMismatch - 显示 deployment 的状态
  • NodeFilesystemSpaceFillingUp - 显示磁盘使用情况

其他错误

这些是通过监听 APIServer 来识别的:

  • CrashLoopBackOff
  • ImagePullBackOff
  • Node NotReady

此外,WARNING 级别及以上的所有 Kubernetes 事件(kubectl get events)都会发送到 Robusta UI。

变更追踪

默认情况下,对 Deployments、DaemonSets 和 StatefulSets 的所有变更都会发送到 Robusta UI,以便与 Prometheus 警报和其他错误相关联。默认情况下,这些更改不会发送到其他接收器(例如 Slack),因为它们是垃圾邮件。

云原生生态圈专注云原生、运维、Go、Python技术分享。126篇原创内容

公众号

安装

要在你的 K8s 集群中配置 Robusta,首先我们需要安装 Robusta,并连接至少一个目的地(“接收器”)和至少一个源(“触发器”)。

为了配置 robusta,我们需要安装 Robusta CLI 工具,直接使用下面的命令即可安装:

# 需要 Python3.7 或以上版本
pip install -U robusta-cli --no-cache

然后就可以生成 Robusta 配置文件,这会配置安装 Slack 或其他集成工具,也非常推荐开启 cloud UI 工具:

robusta gen-config

上面的命令默认情况下会让我们配置 Slack,所以需要提前做好配置,提供一个 channel 用于接收相关信息,最后会生成一个名为 generated_values.yaml 的 Helm values 文件,如果在你的 Slack 频道中收到了如下所示的信息则证明配置是正确的:

然后我们就可以使用 Helm 进行安装了,首先添加 Helm Chart Repo:

 helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update

然后可以使用下面的命令进行安装:

helm install robusta robusta/robusta -f ./generated_values.yaml \
    --set clusterName=<YOUR_CLUSTER_NAME>

如果你使用的是 KinD 测试集群,则可以提供一个 isSmallCluster=tru 的参数,这样可以减少相关资源:

helm install robusta robusta/robusta -f ./generated_values.yaml \
    --set clusterName=<YOUR_CLUSTER_NAME> \
    --set isSmallCluster=true

比如我这里是 KinD 的测试集群,安装完成后会有如下所示的 Pod 列表:

$ kubectl get pods
NAME                                                     READY   STATUS    RESTARTS      AGE
alertmanager-robusta-kube-prometheus-st-alertmanager-0   2/2     Running   3 (30m ago)   3h25m
prometheus-robusta-kube-prometheus-st-prometheus-0       2/2     Running   2 (34m ago)   4h21m
robusta-forwarder-579fb4b548-7xqq8                       1/1     Running   1 (30m ago)   4h23m
robusta-grafana-797c64d5b4-2dbhl                         3/3     Running   3 (30m ago)   4h23m
robusta-kube-prometheus-st-operator-7c5db9ccb9-gczlp     1/1     Running   1 (30m ago)   4h23m
robusta-kube-state-metrics-649fd7db9f-6sd8p              1/1     Running   1 (34m ago)   4h23m
robusta-prometheus-node-exporter-5426b                   1/1     Running   1 (30m ago)   4h23m
robusta-prometheus-node-exporter-hx6r4                   1/1     Running   1 (30m ago)   4h23m
robusta-prometheus-node-exporter-np4jj                   1/1     Running   1 (30m ago)   4h23m
robusta-runner-9f4f56c8b-49s7p                           1/1     Running   1 (30m ago)   3h48m

如果安装的时候启用了 Robusta 的 UI 功能,则可以在 Web UI 中看到当前集群的相关监控数据。

测试

默认情况下,Robusta 会在 Kubernetes pod 崩溃时发送通知,这里我们创建一个 crashing 的 pod 来进行测试,该测试应用的资源清单如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: crashpod
spec:
  selector:
    matchLabels:
      app: crashpod
  template:
    metadata:
      labels:
        app: crashpod
    spec:
      containers:
      - image: busybox
        command: ["sh"]
        args:
        - "-c"
        - "wget -O - https://gist.githubusercontent.com/odyssomay/1078370/raw/35c5981f8c139bc9dc02186f187ebee61f5b9eb9/gistfile1.txt 2>/dev/null; exit 125;"
        imagePullPolicy: IfNotPresent
        name: crashpod
      restartPolicy: Always

直接应用该清单即可(或者执行 robusta demo 命令也可以),正常启动后很快该 pod 就会崩溃:

$ kubectl get pods -A
NAME                            READY   STATUS             RESTARTS   AGE
crashpod-64d8fbfd-s2dvn         0/1     CrashLoopBackOff   1          7s

一旦 pod 达到两次重启后,Slack 频道就可以接收到有关崩溃 pod 的消息。

而且还可以看到完整的 pod 崩溃日志,这个对于监控报警是非常有意义的。同样如果开启了 Robusta UI,在 Web UI 页面中也可以看到类似的消息。

自动化基础

为了演示 Robusta 自动化是如何工作的,我们将配置一个在 Deployment 发生变化时发送 Slack 消息的自动化。

首先添加下面内容到 generated_values.yaml 文件中:

customPlaybooks:
- triggers:
    - on_deployment_update: {}
  actions:
    - resource_babysitter:
        omitted_fields: []
        fields_to_monitor: ["spec.replicas"]

然后更新 Robusta:

helm upgrade robusta robusta/robusta --values=generated_values.yaml

更新后我们来更改一个 Deployment 的副本数:

kubectl scale --replicas NEW_REPLICAS_COUNT deployments/DEPLOYMENT_NAME

正常然后 Slack 的频道就会收到对应的一条如下所示消息通知了:

如果启用了 Robusta UI,所有的报警和变更也都会出现在 timeline 下面:

我们也可以点击查看变更的内容:

当然我们还可以利用 Robusta 来做很多事情,可以自己来实现 playbook 操作,关于 Robusta 的更多高级使用可以参考官方文档 https://docs.robusta.dev 了解更多信息。

来源:k8s技术圈

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: