Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Prometheus是什么?

Prometheus是什么?

作者头像
极客运维圈
发布于 2020-09-10 07:35:09
发布于 2020-09-10 07:35:09
1.1K00
代码可运行
举报
文章被收录于专栏:乔边故事乔边故事
运行总次数:0
代码可运行

简介

Prometheus初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目。

其特征如下:

  • 具有由 metric 名称和键/值对标识的时间序列数据的多维数据模型
  • 有一个灵活的查询语言
  • 不依赖分布式存储,只和本地磁盘有关
  • 通过 HTTP 的服务拉取时间序列数据
  • 也支持推送的方式来添加时间序列数据
  • 还支持通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持

它有以下几个组件组成:

  • Prometheus Server:用于抓取指标、存储时间序列数据
  • exporter:暴露指标让任务来抓
  • pushgateway:push 的方式将指标数据推送到该网关
  • alertmanager:处理报警的报警组件
  • adhoc:用于数据查询

架构如下:

其流程很简单,Prometheus server端可以直接接收或者通过pushgateway获取到数据,存储到TSDB中,然后对数据进行规则整理,通过Altermanager进行报警或者通过Grafana等工具进行展示。

搭建

在容器外搭建

Prometheus在容器外搭建非常简单,只需要下载对应的release,启动二进制文件即可。 下载地址:https://prometheus.io/download/ 然后可以直接用下面命令启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./prometheus --config.file=prometheus.yml

其中prometheus.yaml是主要的配置文件,主要配置信息如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']

上面配置信息主要包括三个模块:global,rule_files,scrape_configs。 (1)、global定义Prometheus server全局配置。

  • scrape_interval,定义采集频率
  • evaluation_interval,定义评估规则的频率,Prometheus使用规则产生的时间序列数据或者产生的警报

(2)、rule_file,用于指定规则,Prometheus使用规则产生的时间序列数据或者产生的警报 (3)、scrape_configs,用于控制监控的资源

Prometheus默认会通过/metrics路径采集metrics,比如:curl http://localhost:9090/metrics 就可以看到相应的资源对象了。

在容器内搭建

1、创建namespace:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl create ns kube-ops

2、创建configmap,保存我们的主配置文件prometheus.yaml,这样我们要更新配置文件的话就只需要更新这个configmap即可。 prom-configmap.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-ops
data:
  prometheus.yaml: |
    global:
      scrape_interval: 15s
      scrape_timeout: 15s
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
      - targets: ['localhost:9090']

创建资源:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl apply -f prom-configmap.yaml 
configmap/prometheus-config created
# kubectl get configmap -n kube-ops 
NAME                DATA   AGE
prometheus-config   1      16s

(3)、创建prometheus的Pod prom-deploy.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus-deploy
  namespace: kube-ops
  labels:
    app: prometheus
spec:
  selector:
    matchLabels:
      app: prometheus
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      serviceAccountName: prometheus-sa
      containers:
      - name: prometheus
        image: prom/prometheus:v2.14.0
        imagePullPolicy: IfNotPresent
        command:
        - "/bin/prometheus"
        args:
        - "--config.file=/etc/prometheus/prometheus.yaml"
        - "--storage.tsdb.path=/data/prometheus"
        - "--storage.tsdb.retention=24h"
        - "--web.enable-admin-api"
        - "--web.enable-lifecycle"
        ports:
        - name: http
          protocol: TCP
          containerPort: 9090
        volumeMounts:
        - name: data
          mountPath: "/data/prometheus"
          subPath: prometheus
        - name: prometheus-config
          mountPath: "/etc/prometheus"
        resources:
          requests:
            cpu: 100m
            memory: 500Mi
          limits:
            cpu: 100m
            memory: 500Mi
      securityContext:
        runAsUser: 0
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: prometheus
      - name: prometheus-config
        configMap:
          name: prometheus-config

我们把上面定义的configMap通过挂载的形式挂载到容器中,然后我们还要定义一个持久化PVC。 (4)、创建PV,PVC prom-pvc.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: xx.xx.xx.xx
    path: /data/k8s/prometheus
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus
  namespace: kube-ops
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

(5)、配置RBAC认证 我们在deploy的模板中定义了serviceAccount,我们就需要定义一个serviceAccount的RBAC。 prom-rbac.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus-sa
  namespace: kube-ops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - services
  - endpoints
  - pods
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus-sa
  namespace: kube-ops

(6)、创建Service,用来暴露promethes服务 prom-service.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: prometheus-svc
  namespace: kube-ops
spec:
  type: NodePort
  selector:
    app: prometheus
  ports:
  - name: prometheus-web
    port: 9090
    targetPort: http

(7)、创建配置清单 创建PVC

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl apply -f prom-pvc.yaml 
persistentvolume/prometheus-pv created
persistentvolumeclaim/prometheus created
# kubectl get pv -n kube-ops 
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
prometheus-pv   10Gi       RWO            Recycle          Bound    kube-ops/prometheus                           7s
# kubectl get pvc -n kube-ops 
NAME         STATUS   VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS   AGE
prometheus   Bound    prometheus-pv   10Gi       RWO                           13s

创建RBAC

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl apply -f prom-rbac.yaml 
serviceaccount/prometheus-sa created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
# kubectl get clusterrole -n kube-ops | grep prometheus
prometheus                                                             35s
# kubectl get clusterrolebinding -n kube-ops | grep prometheus
prometheus                                             46s

创建Pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl apply -f prom-deploy.yaml 
deployment.extensions/prometheus-deploy created
# kubectl get deploy -n kube-ops 
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
prometheus-deploy   1/1     1            0           10s
# kubectl get pod -n kube-ops 
NAME                                 READY   STATUS    RESTARTS   AGE
prometheus-deploy-694446b7cb-ssdqm   1/1     Running   0          18s

创建Service

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl apply -f prom-service.yaml 
service/prometheus-svc created
# kubectl get svc -n kube-ops 
NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
prometheus-svc   NodePort   10.68.254.74   <none>        9090:23050/TCP   6

然后就可以通过浏览器访问WEB界面了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客运维圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Prometheus 长期远程存储方案 VictoriaMetrics 入门实践
VictoriaMetrics(简称VM) 是一个支持高可用、经济高效且可扩展的监控解决方案和时间序列数据库,可用于 Prometheus 监控数据做长期远程存储。
我是阳明
2022/05/22
7.7K0
Prometheus 长期远程存储方案 VictoriaMetrics 入门实践
Prometheus监控神器-Kubernetes篇(一)
本篇使用StorageClass来持久化数据,搭建Statefulset的Prometheus联邦集群,对于数据持久化,方案众多,如Thanos、M3DB、InfluxDB、VictorMetric等,根据自己的需求进行选择,后面会详细讲解针对数据持久化的具体细节。
Kubernetes技术栈
2020/09/09
2.1K0
使用 vmagent 代替 Prometheus 采集监控指标
vmagent 可以帮助我们从各种来源收集指标并将它们存储在 VM 或者任何其他支持 remote write 协议的 Prometheus 兼容的存储系统中。
我是阳明
2022/05/22
4.1K0
使用 vmagent 代替 Prometheus 采集监控指标
使用 Thanos 实现 Prometheus 的高可用
前面我们已经学习了 Prometheus 的使用,了解了基本的 PromQL 语句以及结合 Grafana 来进行监控图表展示,通过 AlertManager 来进行报警,这些工具结合起来已经可以帮助我们搭建一套比较完整的监控报警系统了,但是也仅仅局限于测试环境,对于生产环境来说则还有许多需要改进的地方,其中一个非常重要的就是 Prometheus 的高可用。
我是阳明
2020/06/15
8.5K1
使用 Thanos 实现 Prometheus 的高可用
Prometheus监控神器-Kubernetes篇(三)
当我们有多个Kubernetes集群的时候,这个时候就需要需要指标汇总的需求了,如上图一样,我们假定在外部部署一个Prometheus的Federate,然后去采集当前k8s中的kube-system与default俩个
Kubernetes技术栈
2020/09/10
1.2K0
Prometheus监控神器-Kubernetes篇(三)
部署 Prometheus 和 Grafana 到 k8s
上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8s 中部署的时候就不能在使用前面讲的静态配置的方式来部署了,需要使用 Prometheus 的服务发现。
huofo
2022/03/17
8690
部署 Prometheus 和 Grafana 到 k8s
kubernetes监控-prometheus(十六)
通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。
yuezhimi
2020/09/30
8520
kubernetes监控-prometheus(十六)
Prometheus监控k8s集群组件
cAdvisor已经内置在了 kubelet 组件之中,所以不需要单独去安装,cAdvisor的数据路径为/api/v1/nodes//proxy/metrics,同样这里使用 node 的服务发现模式,因为每一个节点下面都有 kubelet,自然都有cAdvisor采集到的数据指标,配置如下:
mikelLam
2022/10/31
1.4K0
Prometheus监控k8s集群组件
Kubernetes集群监控方案详解
本文介绍在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。
星哥玩云
2022/07/13
3.1K0
Kubernetes集群监控方案详解
Prometheus搭建使用
上面这个配置文件中包含了3个模块:global、rule_files 和 scrape_configs。
mikelLam
2022/10/31
5670
Prometheus搭建使用
Prometheus 监控外部 Kubernetes 集群
前面我们的文章中都是将 Prometheus 安装在 Kubernetes 集群中来采集数据,但是在实际环境中很多企业是将 Prometheus 单独部署在集群外部的,甚至直接监控多个 Kubernetes 集群,虽然不推荐这样去做,因为 Prometheus 采集的数据量太大,或大量消耗资源,比较推荐的做法是用不同的 Prometheus 实例监控不同的集群,然后用联邦的方式进行汇总。但是使用 Prometheus 监控外部的 Kubernetes 集群这个需求还是非常有必要的。
我是阳明
2020/07/13
4K0
Prometheus监控k8s集群节点
Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标 内部系统组件的状态:比如 kube-scheduler、kube-controller-manager、kubedns/coredns 等组件的详细运行状态 编排级的 metrics:比如 Deployment 的状态、资源请求、调度和 API 延迟等数据指标
mikelLam
2022/10/31
1.7K0
Prometheus监控k8s集群节点
构建企业级监控平台系列(十九):Prometheus 报警模块 AlertManager
之前我们学习 Prometheus 的时候就了解到 Prometheus 包含一个报警模块,就是我们的 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组等,是一款前卫的告警通知系统。
民工哥
2023/10/24
9360
构建企业级监控平台系列(十九):Prometheus 报警模块 AlertManager
Kubernetes集群监控-详解Prometheus高效监控
Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于 2016 年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目。Prometheus 相比于其他传统监控工具主要有以下几个特点:
王先森sec
2023/11/11
2.3K0
Kubernetes集群监控-详解Prometheus高效监控
实战Prometheus
最近手头的项目开始从 PHP,Lua 迁移到 Golang,心想正好趁此机会夯实监控,提到 Golang 的监控,不得不说 prometheus 已经是标配,在 Golang 里集成起来非常简单:
LA0WAN9
2021/12/14
5420
实战Prometheus
关于Prometheus在K8S中的部署方案如何选择,以及分享手工部署的YAML
对于技术的选型,往往是没有规定死是要用哪一项技术的,而是需要结合业务的需求、运维场景、自身对某项技术的掌握程度、以及其它更多的考量因素来共同决定的:
不背锅运维
2023/05/26
4290
关于Prometheus在K8S中的部署方案如何选择,以及分享手工部署的YAML
Kubernetes之日志和监控(十五)
当然,kubectl describe除了能够查看pod的日志信息,还能查看比如Node、RC、Service、Namespace等信息。 注意 :要是想查看指定命名空间之下的,可以-n=namespace
落寞的鱼丶
2022/02/07
7470
Prometheus监控神器-Kubernetes篇(二)
本篇使用StorageClass来持久化数据,搭建Statefulset的Grafana,并且在Dashboard导入前配置前面已经创建好的Prometheus的集群内部访问地址,同时配置ingress-nginx外部访问。
Kubernetes技术栈
2020/09/09
9200
在 Kubernetes 上手动部署 Prometheus
我们知道监控是保证系统运行必不可少的功能,特别是对于 Kubernetes 这种比较庞大的系统来说,监控报警更是不可或缺,我们需要时刻了解系统的各种运行指标,也需要时刻了解我们的 Pod 的各种指标,更需要在出现问题的时候有报警信息通知到我们。
CNCF
2021/02/23
8970
在 Kubernetes 上手动部署 Prometheus
Prometheus+Grafana+altermanager监控k8s并配置报警[通俗易懂]
通过daemonset部署可使每个节点都有一个Pod来采集数据,node-exporter.yaml 内容如下:
全栈程序员站长
2022/08/25
5.1K0
Prometheus+Grafana+altermanager监控k8s并配置报警[通俗易懂]
相关推荐
Prometheus 长期远程存储方案 VictoriaMetrics 入门实践
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验