Advertisement

Getting Started with Prometheus Stack on EKS Cluster

阅读量:

作者:禅与计算机程序设计艺术

1.简介

Prometheus是一个开源系统监控和警报工具包。它可以采集各种时间序列数据(如CPU、内存、磁盘、网络等)来监测系统的运行状况。随着越来越多公司和组织采用Prometheus做为监控基础设施,更多的人开始对Prometheus进行了深度的研究和实践。而云服务厂商也逐渐将其作为自己的云原生监控组件之一。Kubernetes上也是越来越多公司开始使用其来做为集群的监控解决方案。本文将带领读者搭建一个基于EKS集群的Prometheus栈,并且部署一些常用的exporter到目标节点上并让Prometheus自动发现这些exporter。

2.Prometheus介绍

Prometheus是一个开源系统监控和警报工具包。它可以采集各种时间序列数据(如CPU、内存、磁盘、网络等)来监测系统的运行状况。Prometheus的主要功能包括:

  • 服务发现:Prometheus可以自动发现目标服务的端点和服务发现规则。通过服务发现,Prometheus可以获取当前正在运行的服务的列表并监测它们的健康状态。

  • 查询语言:Prometheus支持灵活的查询语言,允许用户指定要收集哪些指标以及如何聚合它们。

  • 报警机制:Prometheus具有强大的报警机制,可以设置阈值并触发 alerts when certain conditions are met.

  • 持久化存储:Prometheus可以将所有数据保留在本地磁盘或远程存储中。

  • 高度可靠性:Prometheus经过精心设计可以保证高可用性。它提供强大的查询语言和复杂的数据模型,可以处理大量数据流。

3.Prometheus相关概念和术语

3.1 Prometheus Server

Prometheus Server负责抓取各个目标对象(Exporter)生成的数据并存储起来,Prometheus会将数据存放在时间序列数据库中。因此,如果要获取Prometheus的相关信息,则需要连接到Prometheus Server。

3.2 Exporter

Exporter就是暴露给Prometheus的应用。通常来说,Exporter是一个独立的进程或者客户端库,它会从被监控的目标应用程序或服务中收集数据,并通过HTTP接口的方式暴露给Prometheus Server。

常见的Exporter如下:

  1. Node Exporter:Node Exporter是一个由Prometheus官方发布的Exporter,用于收集主机上的性能指标。例如CPU、内存、磁盘利用率、网络传输速度等。

  2. MySQLd Exporter:MySQLd Exporter是一个由Percona发布的用于导出MySQL服务器指标的Exporter。可以用于监控MySQL服务器的运行情况。

  3. Apache Exporter:Apache Exporter是一个由CoreOS发布的用于导出Apache服务器指标的Exporter。可以用于监控Apache服务器的运行情况。

  4. Nginx Exporter:Nginx Exporter是一个由Prometheus官方发布的用于导出Nginx服务器指标的Exporter。可以用于监控Nginx服务器的运行情况。

  5. HAProxy Exporter:HAProxy Exporter是一个由Metrics Finance发布的用于导出HAProxy服务器指标的Exporter。可以用于监控HAProxy服务器的运行情况。

  6. RabbitMQ Exporter:RabbitMQ Exporter是一个由RobustPerception发布的用于导出RabbitMQ服务器指标的Exporter。可以用于监控RabbitMQ服务器的运行情况。

除此之外,还有很多其他类型的Exporter,比如cAdvisor、Redis Exporter、Memcached Exporter等。

3.3 Target

Target是Prometheus中的一个抽象概念。一个Target代表了一个需要被监控的实体,它可能是一个服务或者节点。一般情况下,每个Target都会关联有一个相应的Job。

3.4 Job

Job是用来定义一个监控项集合的集合。每个Job都会关联至少一个Prometheus Server实例,以及多个Targets。

3.5 Alertmanager

Alertmanager是一个独立的组件,用于管理告警。当Prometheus产生告警时,它会将告警消息发送给Alertmanager。

3.6 Pushgateway

Pushgateway是Prometheus的一个推送网关。它接收Prometheus Server的主动推送的监控数据,并存储起来。该网关也可以用作集群中单独的实例,用于处理短期内的业务数据采集需求。

4.准备工作

为了搭建Prometheus栈,首先需要准备好以下资源:

  1. 一台配置了kubectl、AWS CLI、eksctl、helm三件套的机器。
  2. AWS IAM权限。
  3. Helm v3客户端。
  4. Kubernetes集群(版本v1.17)。
  5. Kubectl配置。

安装kubectl和aws-cli:

复制代码
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo./aws/install
    
      
      
      
      
      
    
    代码解读

配置eksctl:

复制代码
    export AWS_ACCESS_KEY_ID=<your access key id>
    export AWS_SECRET_ACCESS_KEY=<your secret access key>
    export AWS_DEFAULT_REGION=us-east-1
    
      
      
    
    代码解读

安装eksctl:

复制代码
    curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
    sudo mv /tmp/eksctl /usr/local/bin
    
      
    
    代码解读

安装Helm v3客户端:

复制代码
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
    
    代码解读

创建一个新的EKS集群:

复制代码
    eksctl create cluster --name prometheus \
    --version 1.17 \
    --region us-west-2 \
    --nodegroup-name standard-workers \
    --nodes 2 \
    --nodes-min 2 \
    --nodes-max 4 \
    --managed
    
      
      
      
      
      
      
      
    
    代码解读

配置Kubectl:

复制代码
    mkdir ~/.kube
    aws eks --region us-west-2 update-kubeconfig --name prometheus
    
      
    
    代码解读

5.安装Prometheus Stack

由于Prometheus项目是一个开源项目,因此可以直接使用helm chart来安装Prometheus stack。下面的命令会部署一个Prometheus server,alertmanager,以及pushgateway组件。其中,prometheus server会使用默认配置,alertmanager则会禁用掉,而pushgateway组件则会设置为Headless Service类型,意味着它不会拥有Cluster IP地址。

复制代码
    git clone https://github.com/prometheus-community/helm-charts.git
    cd helm-charts/charts/prometheus-stack
    helm dependency update
    helm install my-prometheus-stack.
    
      
      
      
    
    代码解读

6.配置Prometheus Stack

默认情况下,Prometheus stack会启动时开启三个组件:Prometheus Server,Alertmanager和Pushgateway。但是这些组件都是无状态的,也就是说它们的数据会丢失重启后无法保留。为了能够让Prometheus保存数据,我们需要为它们指定持久化存储。

6.1 配置Prometheus Server

默认情况下,Prometheus Server没有任何持久化配置。我们可以使用下面的命令为Prometheus Server添加持久化存储。

复制代码
    helm upgrade my-prometheus-stack. \
      --set persistence.enabled=true \
      --set persistence.size=5Gi
    
      
      
    
    代码解读

上述命令启用了Prometheus Server的数据持久化,并且设置了5G的存储容量。

6.2 配置Alertmanager

默认情况下,Alertmanager组件没有任何持久化配置。我们可以使用下面的命令为Alertmanager添加持久化存储。

复制代码
    helm upgrade my-prometheus-stack. \
      --set alertmanager.persistentVolume.enabled=true \
      --set alertmanager.persistentVolume.size=5Gi
    
      
      
    
    代码解读

上述命令启用了Alertmanager的数据持久化,并且设置了5G的存储容量。

6.3 配置Pushgateway

默认情况下,Pushgateway组件没有任何持久化配置。我们可以使用下面的命令为Pushgateway添加持久化存储。

复制代码
    helm upgrade my-prometheus-stack. \
      --set pushgateway.service.type="ClusterIP" \
      --set pushgateway.persistence.enabled=true \
      --set pushgateway.persistence.storageClass="gp2" \
      --set pushgateway.persistence.size=5Gi
    
      
      
      
      
    
    代码解读

上述命令修改了Pushgateway的Service Type为ClusterIP,使得它只能被其它集群内部组件访问。并且为Pushgateway启用了数据持久化,并设置了GP2类型的存储类,存储容量为5G。

7.使用Prometheus Stack

7.1 添加Exporter

Prometheus stack已经成功部署,现在就可以向Prometheus Server中添加Exporter了。下面的命令会添加node exporter到所有集群节点。

复制代码
    kubectl apply -f node-exporter-daemonset.yaml
    
    
    代码解读

其中,node-exporter-daemonset.yaml的内容如下所示:

复制代码
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: node-exporter
      namespace: default
    spec:
      selector:
    matchLabels:
      app: node-exporter
      template:
    metadata:
      labels:
        app: node-exporter
    spec:
      serviceAccount: default
      hostNetwork: true
      tolerations:
      - effect: NoSchedule
        operator: Exists
      containers:
      - image: prom/node-exporter:v0.18.1
        name: node-exporter
        ports:
        - containerPort: 9100
          protocol: TCP
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        securityContext:
          privileged: true
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

这个模板创建了一个名叫node-exporter的DaemonSet,该DaemonSet会在每个集群节点上运行一个node exporter Pod。每隔一段时间,Prometheus就会从这几个Pod上抓取node exporter的指标。

注意,以上命令会将node exporter DaemonSet部署到默认命名空间default。如果你想将node exporter部署到其他命名空间,需要调整namespace字段。

7.2 查看Prometheus Dashboard

Prometheus stack已成功配置,并且已添加node exporter。现在可以通过浏览器打开Prometheus dashboard页面查看相关信息。

图中展示了Prometheus Server,存储,查询,警报等模块的主要信息。

点击右上角的菜单按钮,可以看到不同的视图。选择Status -> Targets即可查看到目前集群中所有的targets,以及它们的健康状态。

点击左侧边栏中的Graph按钮,然后点击右上角的Add Graph按钮,可以添加新的图表。比如,可以在node exporter所在的节点上绘制cpu利用率的曲线。

点击左侧边栏中的Alerts按钮,然后点击右上角的Create Rule按钮,可以添加新的告警规则。比如,可以设置当CPU利用率超过85%时,触发告警。

这些都是Prometheus Dashboard提供的基本功能。当然,Prometheus还提供了许多丰富的特性,如Dashboard模板,PromQL语句语法,折线图的直方图等。这些特性都可以根据实际需求来使用。

全部评论 (0)

还没有任何评论哟~