prometheus学习笔记之简介与安装

一、prometheus 简介

1.简介

Prometheus是基于go语⾔开发的⼀套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统, Prometheus于2016年加⼊CNCF(Cloud Native Computing Foundation,
云原⽣计算基⾦会) ,2018年8⽉9⽇prometheus成为CNCF继kubernetes 之后毕业的第⼆个项⽬,prometheus在容器和微服务领域中得到了⼴泛的应⽤,其特点主要如下:
  使⽤key-value的多维度(多个⻆度,多个层⾯,多个⽅⾯)格式保存数据
  数据不使⽤MySQL这样的传统数据库,⽽是使⽤时序数据库,⽬前是使⽤的TSDB
  ⽀持第三⽅dashboard实现更绚丽的图形界⾯,如grafana(Grafana 2.5.0版本及以上)
  组件模块化
  不需要依赖存储,数据可以本地保存也可以远程保存
  平均每个采样点仅占3.5 bytes,且⼀个Prometheus server可以处理数百万级别的的metrics指标数据。
  ⽀持服务⾃动化发现(基于consul等⽅式动态发现被监控的⽬标服务)
  强⼤的数据查询语句功(PromQL,Prometheus Query Language)
  数据可以直接进⾏算术运算
  易于横向伸缩
  众多官⽅和第三⽅的exporter实现不同的指标数据收集

2.为什么使⽤Prometheus

容器监控的实现⽅对⽐虚拟机或者物理机来说⽐⼤的区别,⽐如容器在k8s环境中可以任意横向扩容与缩容,那么就需要监控服务能够⾃动对新创建的容器进⾏监控,当容器删除后⼜能够及时的从监控服务
中删除,⽽传统的zabbix的监控⽅式需要在每⼀个容器中安装启动agent,并且在容器⾃动发现注册及模板关联⽅⾯并没有⽐较好的实现⽅式。

3.Prometheus 架构图

prometheus server:主服务,接受外部http请求,收集、存储与查询数据等
prometheus targets: 静态收集的⽬标服务数据
service discovery:动态发现服务
prometheus alerting:报警通知
push gateway:数据收集代理服务器(类似于zabbix proxy)
data visualization and export: 数据可视化与数据导出(访问客户端)

二、 部署Prometheus Server 方式

可以通过不同的⽅式安装部署prometheus监控环境,虽然以下的多种安装⽅式演示了不同的部署⽅式,但是实际⽣产环境只需要根据实际需求选择其中⼀种⽅式部署即可,不过⽆论是使⽤哪⼀种⽅式安装部署的prometheus server,以后的使⽤都是⼀样的,为了更好的学习后续的笔记⼤部分以⼆进制安装环境为例,其它会做简单的对应介绍,目前主要有以下的安装方式:
1.docker-compose部署
2.Operator 部署
3.Helm部署
4.二进制部署

1.docker-compose部署

vim .env
ADMIN_USER=admin ADMIN_PASSWORD=admin git clone https://github.com/Einsteinish/Docker-Compose-Prometheus-and-Grafana.git #同时部署了grafana cd Docker-Compose-Prometheus-and-Grafana docker-compose up -d #相关配置自行修改,启动后访问本机9090端口

2.Operator 部署

Operator部署器是基于已经编写好的yaml⽂件,可以将prometheus serveralertmanagergrafananode-exporter等组件⼀键批量部署,相关配置自行修改

git clone -b v0.10.0 https://github.com/prometheus-operator/kubeprometheus.git
cd kube-prometheus/
vim manifests/prometheus-service.yaml
spec:
type: NodePort #修改为NodePort便于访问,或者通过ingress

kubectl apply --server-side -f manifests/setup
kubectl apply -f manifests/ #有些镜像⽆法下载需要⾃⾏解决
kubectl get pods -n monitoring #正常后访问节点IP:prometheus svc nodeport端口

3.helm部署

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm search repo prometheus-community
kubectl create ns monitoring
helm install prometheus-operator --set rbacEnable=true --namespace=monitoring  --wait prometheus-community/prometheus-operator #相关配置自行修改

#修改svc类型或者直接使用ingress
kubectl -n monitoring patch svc prometheus-operator-grafana -p '{"spec":{"type":"NodePort"}}'
kubectl -n monitoring patch svc prometheus-operator-prometheus -p '{"spec":{"type":"NodePort"}}'
获取grafana admin用户密码
kubectl  -n monitoring get secrets |grep Opaque|grep grafana|awk '{print $1}'|xargs kubectl -n monitoring get secrets -o yaml|grep admin-password|grep -v f:|awk -F "admin-password: " '{print $2}'|base64 -d

4.二进制部署

wget https://github.com/prometheus/prometheus/releases/download/v2.36.0/prometheus-2.36.0.linux-amd64.tar.gz
tar xf prometheus-2.36.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local
ln -sv prometheus-2.36.0.linux-amd64 prometheus

vim /usr/lib/systemd/system/prometheus.service #二进制和配置文件根据实际情况替换,命令行参数通过命令帮助获取
[Unit]
Description=prometheus
[Service]
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=655360
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=prometheus
[Install]
WantedBy=multi-user.target

systemctl   daemon-reload
systemctl   start prometheus.service
systemctl  enable prometheus.service
netstat -tnlp #访问本机9090端口

 

参考文档:

https://prometheus.io/

https://github.com/prometheus/prometheus

posted @ 2024-08-20 19:26  百衲本  阅读(99)  评论(0编辑  收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码