kube-prometheus添加target
参考 https://github.com/prometheus-operator/kube-prometheus#quickstart
部署prometheus
kubectl create ns monitoring
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
kubectl create -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
kubectl create -f manifests/
简单几步,我们的prometheus就起来了
[root@app01 kube-prometheus]# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 25h
alertmanager-main-1 2/2 Running 0 25h
alertmanager-main-2 2/2 Running 0 25h
grafana-85c89999cb-7wpd8 1/1 Running 0 45h
kube-state-metrics-6b7567c4c7-26ws7 3/3 Running 0 45h
node-exporter-4cw8g 2/2 Running 0 45h
node-exporter-glj7r 2/2 Running 0 45h
prometheus-adapter-b8d458474-8zh5w 1/1 Running 0 45h
prometheus-k8s-0 3/3 Running 1 23h
prometheus-k8s-1 3/3 Running 1 23h
prometheus-operator-56b8d8db89-kfwvz 2/2 Running 0 45h
但是,这个方式部署起来的prometheus还有很多的缺陷,不能直接用于生产环境使用,具体问题点如下:
1、数据没有持久化存储(grafana、prometheus)
2、svc都是用的clusterip 不方便运维管理
3、默认的告警方式不方便
4、加监控target也不方便
后面,我会分成多篇博客来拆解这些问题。
添加监控target
0、修改文件 vim kube-prometheus/manifests/prometheus-prometheus.yaml 增加如下内容:
additionalScrapeConfigs:
name: additional-configs
key: prometheus-additional.yaml
具体的位置上上下文,可以看下图:
应用变更到k8s生效:
kubectl apply -f kube-prometheus/manifests/prometheus-prometheus.yaml -n monitoring
1、编写需要增加的target到prometheus-additional.yaml 文件里面
vim prometheus-additional.yaml
- job_name: linuxbase
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- 172.10.0.23:9100
2、创建新的secret
kubectl create secret generic additional-scrape-configs -n monitoring --from-file=prometheus-additional.yaml --dry-run=client -o yaml > additional-scrape-configs.yaml
3、应用到prometheus
kubectl apply -f additional-scrape-configs.yaml -n monitoring
4、稍等片刻,查看prometheus的target列表即可,或者我们可以查看 prometheus的 secrets
增加暴露地址端口
我这儿简单演示,用的loadbalancer方式暴露。 更好的方法是通过ingress 域名的方式暴露出来,因为grafana通常还会开给研发人员使用。
lb-grafana.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true"
labels:
app: grafana
name: grafana-lb
namespace: monitoring
spec:
externalTrafficPolicy: Cluster
ports:
- name: http
port: 3000
protocol: TCP
targetPort: 3000
selector:
app: grafana
sessionAffinity: None
type: LoadBalancer
lb-alertmanager.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true"
labels:
alertmanager: main
name: alertmanager-main-lb
namespace: monitoring
spec:
externalTrafficPolicy: Cluster
ports:
- name: web
port: 9093
protocol: TCP
targetPort: 9093
selector:
alertmanager: main
app: alertmanager
type: LoadBalancer
lb-prometheus.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true"
labels:
prometheus: k8s
name: prometheus-k8s-lb
namespace: monitoring
spec:
externalTrafficPolicy: Cluster
ports:
- name: web
port: 9090
protocol: TCP
targetPort: 9090
selector:
app: prometheus
prometheus: k8s
type: LoadBalancer
持久化数据存储
grafana和prometheus的数据都需要做持久存储。
grafana持久持久存储是因为可能安装些第三方的插件。
prometheus的持久存储,自不必多说,那是肯定需要的。
我们部署在云上,持久化存储这块,可以很方便的使用他们提供的服务(NFS、OSS、aliyun-disk都可以)。
- WordPress自带TinyMCE编辑器相关功能增强
- 联众互动收购3家棋牌游戏公司,其域名买自蔡文胜手中
- 未来有什么工作绝对不会被人工智能取代
- WordPress在RSS Feed 中输出版权信息
- WordPress免插件仅代码实现文章浏览次数的方法(2)
- 苹果被告了,但网友们却觉得一点也不亏!
- Castle 整合.NET Remoting
- 这三要素,让区块链技术成为颠覆世界的技术
- 代码实现 WordPress 反垃圾评论功能
- Flash/Flex学习笔记(39):弹性运动
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
- ASP.NET vNext 概述
- 丰富排版页面——为你的wordpress主题添加短代码形式美化框
- 开放式管理基础结构 OMI
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Siamese Network & Triplet NetWork
- js常用函数集锦(持续更新)
- 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类
- 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
- linux 达梦数据库 命令行 卸载
- Access Control: Database(数据库访问控制)最新解析及完整解决方案
- 启动Apache Atlas时报错
- Apache Atlas 安装部署
- SwiftUI:禁止用户交互
- Qt音视频开发34-Onvif时间设置
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!
- 短视频APP开发,简单计时功能
- LeetCode | 94.二叉树的中序遍历
- Druid 的整合
- LeetCode | 104.二叉树的最大深度