-
Prometheus监控k8s
2020-04-18 13:01:53 -
K8s部署prometheus监控k8s
2021-01-01 22:43:391、prometheus 作为监控k8s的最佳选择在这里做一个在k8s部署prometheus文档供大家参考。 #私自转载请联系博主否则必定追究版权 下方有微信 系统环境: IP 节点名称(不是主机名) 192.168.182.150 k8s-...prometheus监控使用(按照文档步骤就可以操作成功)。
文档分别坐了使用k8s集群部署docker 跑prometheus监控。(后期如果有时间会做一个监控pod的文档)
监控K8s细节文章链接
https://blog.csdn.net/zeorg/article/details/112164465
特别说明:此环境要提前部署好k8s。
1、prometheus 作为监控k8s的最佳选择在这里做一个在k8s部署prometheus文档供大家参考。#私自转载请联系博主否则必定追究版权 下方有微信
系统环境:IP 节点名称(不是主机名) 192.168.182.150 k8s-master 192.168.182.151 k8s-node2 192.168.182.152 k8s-node2 192.168.182.153 docker仓库 1、在docker仓库里面先拉取prometheus images(直接使用k8s拉取因为网络问题可以说基本是失败的)。
docker仓库执行docker pull prom/prometheus:v2.2.1 docker tag prom/prometheus:v2.2.1 192.168.182.153:5000/prom/prometheus:v2.2.1 ###为prometheus:v2.2.1 images 打一个标签 docker push 192.168.182.153:5000/prom/prometheus:v2.2.1 ##上传打包后的prometheus:v2.2.1镜像
2、使用k8s创建prometheus 容器配置。
k8s-master执行创建文件prometheus-config.yml(如果是实验环境目录无所谓) apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: | global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] 创建文件prometheus-deployment.yml(如果是实验环境目录无所谓) apiVersion: v1 kind: "Service" metadata: name: prometheus labels: name: prometheus spec: ports: - name: prometheus protocol: TCP port: 9090 targetPort: 9090 selector: app: prometheus type: NodePort --- apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: name: prometheus name: prometheus spec: replicas: 1 template: metadata: labels: app: prometheus spec: containers: - name: prometheus image: prom/prometheus:v2.2.1 command: - "/bin/prometheus" args: - "--config.file=/etc/prometheus/prometheus.yml" ports: - containerPort: 9090 protocol: TCP volumeMounts: - mountPath: "/etc/prometheus" name: prometheus-config volumes: - name: prometheus-config configMap: name: prometheus-config
3、使用k8s下发任务。
k8s-master执行kubectl create -f prometheus-config.yml kubeckubectl create -f prometheus-deployment.yml
4、查看任务进度。
k8s-master执行[root@master prometheus]# kubectl get pods ##如果下方创建失败可以根据NAME名称查看日志 NAME READY STATUS RESTARTS AGE nginx-3121059884-lx6qc 1/1 Running 0 1h nginx-3121059884-n6bdl 1/1 Running 0 1h nginx-3121059884-n9pxz 1/1 Running 1 4h prometheus-3596598276-5wrkl 1/1 Running 0 1h
5、查看失败日志(我上面是成功后的所以状态是Running)大家可以看我的报错有多次镜像拉取失败。
k8s-master执行kubectl describe pod prometheus-3596598276-5wrkl Name: prometheus-3596598276-5wrkl Namespace: default Node: node-1/192.168.182.151 Start Time: Fri, 01 Jan 2021 21:39:02 +0800 Labels: app=prometheus pod-template-hash=3596598276 Status: Running IP: 10.10.17.5 Controllers: ReplicaSet/prometheus-3596598276 Containers: prometheus: Container ID: docker://d2887dbb516b7415f0ddf1ee1c8fbf0b389db935e361c6108c44a9b52bb6ef29 Image: prom/prometheus:v2.2.1 Image ID: docker-pullable://192.168.182.153:5000/prom/prometheus@sha256:b0912ab008c270be88f6e81d3df6dfd24b7c1f9b4aacbffa70abe2a382152223 Port: 9090/TCP Command: /bin/prometheus Args: --config.file=/etc/prometheus/prometheus.yml State: Running Started: Fri, 01 Jan 2021 22:24:25 +0800 Ready: True Restart Count: 0 Volume Mounts: /etc/prometheus from prometheus-config (rw) Environment Variables: <none> Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: prometheus-config: Type: ConfigMap (a volume populated by a ConfigMap) Name: prometheus-config QoS Class: BestEffort Tolerations: <none> Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1h 58m 9 {default-scheduler } Warning FailedScheduling no nodes available to schedule pods 57m 57m 6 {default-scheduler } Warning FailedScheduling no nodes available to schedule pods 56m 56m 1 {default-scheduler } Normal Scheduled Successfully assigned prometheus-3596598276-5wrkl to node-1 56m 44m 14 {kubelet node-1} Warning FailedMount MountVolume.SetUp failed for volume "kubernetes.io/configmap/0a83b05e-4c34-11eb-ae3b-000c29fd225f-prometheus-config" (spec.Name: "prometheus-config") pod "0a83b05e-4c34-11eb-ae3b-000c29fd225f" (UID: "0a83b05e-4c34-11eb-ae3b-000c29fd225f") with: configmaps "prometheus-config" not found 54m 43m 6 {kubelet node-1} Warning FailedMount Unable to mount volumes for pod "prometheus-3596598276-5wrkl_default(0a83b05e-4c34-11eb-ae3b-000c29fd225f)": timeout expired waiting for volumes to attach/mount for pod "default"/"prometheus-3596598276-5wrkl". list of unattached/unmounted volumes=[prometheus-config] 54m 43m 6 {kubelet node-1} Warning FailedSync Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "default"/"prometheus-3596598276-5wrkl". list of unattached/unmounted volumes=[prometheus-config] 32m 32m 1 {kubelet node-1} spec.containers{prometheus} Normal BackOff Back-off pulling image "prom/prometheus:v2.2.1" 32m 32m 1 {kubelet node-1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "prometheus" with ImagePullBackOff: "Back-off pulling image \"prom/prometheus:v2.2.1\"" 32m 14m 2 {kubelet node-1} spec.containers{prometheus} Warning Failed Failed to pull image "prom/prometheus:v2.2.1": net/http: request canceled 32m 14m 2 {kubelet node-1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "prometheus" with ErrImagePull: "net/http: request canceled" 42m 14m 3 {kubelet node-1} spec.containers{prometheus} Normal Pulling pulling image "prom/prometheus:v2.2.1" 11m 11m 1 {kubelet node-1} spec.containers{prometheus} Normal Pulled Successfully pulled image "prom/prometheus:v2.2.1" 42m 11m 2 {kubelet node-1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy. 11m 11m 1 {kubelet node-1} spec.containers{prometheus} Normal Created Created container with docker id d2887dbb516b; Security:[seccomp=unconfined] 11m 11m 1 {kubelet node-1} spec.containers{prometheus} Normal Started Started container with docker id d2887dbb516b
6、查看容器随机分配端口。
k8s-master执行[root@master prometheus]# kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 3 3 3 3 4h deploy/prometheus 1 1 1 1 1h NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes 10.10.0.1 <none> 443/TCP 4h svc/nginx 10.10.214.157 <nodes> 80:31882/TCP 4h svc/prometheus 10.10.165.138 <nodes> 9090:32332/TCP 1h
6、在web浏览器打开。
-
prometheus监控k8s集群
2020-11-04 14:29:21prometheus监控k8s集群简介环境介绍安装部署部署metrics部署prometheus部署alertmanager部署node-exporter部署blackbox-exporter查看所有pod状态查看界面及日志,确认运行状态 简介 在日常的运维工作中,为了减少...prometheus监控k8s集群
简介
- 在日常的运维工作中,为了减少业务故障的发现和解决时间,通常是需要监控系统的支持,zabbix作为常用监控手段,并不足以满足kubernetes集群的监控,而Prometheus可以更好的进行相关指标的监控。
- 监控的四个黄金指标分为“延迟,通讯量,错误,饱和度”。
- 从网络到编排的指标及手段可以查看下面图片
环境介绍
kubernetes 1.16.4
安装部署
涉及到的部署文件已经放到了github,需要自取,另外不要脸的求点个5星好评。
github地址:https://github.com/zhangyudd/prometheus.git
本文涉及到Prometheus存储,使用了pvc,可自行更换存储。
部署metrics
cd metrics/kube-state-metrics kubectl apply -f . cd metrics/ kubectl apply -f .
部署prometheus
cd prometheus kubectl apply -f .
拷贝rules到容器对应存储目录 /prometheus/
如果修改了配置文件可以进行热更:curl -X POST http://prometheus/-/reload部署alertmanager
cd alertmanager kubectl apply -f .
这里使用的邮箱,修改对应的邮箱为自己邮箱。
部署node-exporter
cd node-exporter kubectl apply -f .
部署blackbox-exporter
cd blackbox-exporter kubectl apply -f .
service 发现需要在service中添加以下字段
#http_probe
annotations:
prometheus.io/scrape: ‘true’
prometheus.io/http-probe: ‘true’
prometheus.io/http-probe-port: ‘8080’
prometheus.io/http-probe-path: ‘/healthz’
#tcp_probe
annotations:
prometheus.io/scrape: ‘true’
prometheus.io/tcp-probe: ‘true’
prometheus.io/tcp-probe-port: ‘80’查看所有pod状态
kubectl get pods -n kube-system
部署完成后可以添加Prometheus和alertmanager的ingress,方便查看状态及问题。
查看界面及日志,确认运行状态
添加grafana数据源展示图表
url填写以下链接:
http://prometheus.kube-system:9090/以下为一些监控常用图表:
12870 这个模板是kube-state-metrics采集的各种k8s资源对象的状态的图表
315这个模板是cadvisor采集的各种指标的图表
1860 和 9276 这个模板是node-exporter采集的各种主机相关的指标的图表
6417这个模板是kube-state-metrics采集的各种k8s资源对象的状态的图表
4859和4865这两个模板是blackbox-exporter采集的服务的http状态指标的图表(两个效果基本一样,选择其一即可)
5345这个模板是blackbox-exporter采集的服务的网络状态指标的图表
11529和9965blackbox采集的关于http tcp探针 -
prometheus监控k8s集群系列之cadvisor篇
2020-09-26 10:14:40通过cadvisor结合prometheus监控k8s集群容器基础设施(container) 简介 cAdvisor可以对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存使用情况、网络吞吐量及文件系统使用情况,1.7.3版本以前,...通过cadvisor结合prometheus监控k8s集群容器基础设施(container)
简介
cAdvisor可以对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存使用情况、网络吞吐量及文件系统使用情况,1.7.3版本以前,cadvisor的metrics数据集成在kubelet的metrics中,在1.7.3以后版本中cadvisor的metrics被从kubelet的metrics独立出来了,每个Node机器上都会有一个aAdvisor对这台机器进行监控。
操作
从简介中我们可以知道,在k8s集群中,每个node节点都会有一个cAdvisor对当前主机进行监控
# prometheus对接k8s的服务发现 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config
从Prometheus的官方文档中,我们可以知道,Prometheus支持对k8s的自动服务发现,支持以下几个角色
- node
- service
- pod
- endpoints
- ingress
新版本的标准配置,kubelet中的cadvisor是没有对外开放4194端口的。所以,我们只能通过apiserver提供的api做代理获取监控指标
cAdvisor的metrics地址: /api/v1/nodes/[节点名称]/proxy/metrics/cadvisor
metrics地址中的节点名称参数可以通过prometheus的kubernetes_sd_config中的node角色自动发现k8s集群中的所有node节点
抓取任务配置如下:
- job_name: 'kubernetes-cadvisor' scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] regex: (.+) replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor target_label: __metrics_path__ - action: labelmap regex: __meta_kubernetes_node_label_(.+) - source_labels: [__meta_kubernetes_node_name] action: replace target_label: node - source_labels: [__meta_kubernetes_node_label_node] action: replace target_label: node_name
将以上配置添加到configmap prometheus-config中,详见“k8s环境下搭建prometheus”一文,更新configmap和pod
## 更新configmap kubectl create configmap prometheus-config --from-file=prometheus.yaml -n monitoring -o yaml --dry-run | kubectl replace -f - ## 更新pod kubectl apply -f prometheus-deploy.yaml ## 热更新配置 curl -XPOST http://localhost:30090/-/reload
页面查看prometheus,可以看到相应的metrics。
常用指标
#cpu使用时间 container_cpu_usage_seconds_total #分配cpu limit数 container_spec_cpu_quota #内存使用量 container_memory_usage_bytes #分配内存 limit数 container_spec_memory_limit_bytes #网络接收流量 container_network_receive_bytes_total #网路发送流量 container_network_transmit_bytes_total #磁盘使用量 container_fs_usage_bytes #磁盘写 container_fs_writes_bytes_total #磁盘读 container_fs_reads_bytes_total
基本查询语句
## 容器cpu使用率 sum by(pod_name, namespace) (rate(container_cpu_usage_seconds_total{image!=""}[5m])) / (sum by(pod_name, namespace) (container_spec_cpu_quota{image!=""} / 100000)) * 100 ## 容器内存使用率 sum by(pod_name, namespace) (container_memory_rss{image!=""}) / sum by(pod_name, namespace) (container_spec_memory_limit_bytes{image!=""}) * 100 != +Inf ## 磁盘使用量 sum by(pod_name, namespace) (container_fs_usage_bytes{image!=""}) / 1024 / 1024 / 1024
欢迎关注我的个人微信公众号,一个菜鸟程序猿的技术分享和奔溃日常
-
Prometheus 监控K8S集群资源监控
2019-10-02 12:35:17Prometheus 监控K8S集群中Pod 目前cAdvisor集成到了kubelet组件内,可以在kubernetes集群中每个启动了kubelet的节点使用cAdvisor提供的metrics接口获取该节点所有容器相关的性能指标数据。cAdvisor对外提供服务的... -
prometheus监控cup_Prometheus 监控 k8s集群(配置监控自己)
2020-12-23 22:13:48本文介绍Prometheus 监控及在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。实现原理类似ELK、EFK组合。node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, ...
-
【MyBatis】执行原理(一):创建会话工厂(SqlSessionFactory) 源码分析
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
docker 日常用命令
-
win32绘制窗口
-
关于Johansen检验的结果
-
Glasterfs 分布式网络文件系统
-
Steam-Dataset-Data-Science:对从Steam网站抓取的包含视频游戏信息的数据集进行分析,数据清理,功能工程和统计测试。 创建了多个线性回归,SVM和随机森林机器学习模型,以尝试预测游戏的评分-源码
-
产品设计原则
-
Redis主从与哨兵
-
ELF视频教程
-
高中地理湘教版必修一锋和天气.docx
-
Liunx 优化思路与实操步骤
-
基于Xcode4开发第一个iPhone程序:“HelloWorld”
-
H3CSE题库+考题模拟器.zip
-
高转换效率Nd:YAG倍频激光器
-
日志收集器-源码
-
程序员必修基础套餐课
-
【MyBatis】配置文件 mybatis-conf.xml 详解
-
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
-
2021-02-26