自由屋推书网—热门的小说推荐平台!

你的位置: 首页 > 其他程序

K8S环境部署nginx-vts+exporter实例并用Grafana展示效果

2022-04-26 16:31:58

使用Nginx-vtx-exporter在Prometheus里监控Nginx,网上多数文章都用的编译源码方式部署。

本文采用容器方式在K8S环境里部署,最详细步骤一步一步带着读者配置。

0. 涉及工具

nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。

环境说明:本人测试环境K8S、Prometheus、Grafana均在不同主机上,且Prometheus、Grafana不是容器化部署。

1. 准备镜像

既然是容器化部署,直接找带vts模块的Nginx,可以用 https://hub.docker.com/r/skyscrapers/nginx

再找vts-exporter,可以用 https://hub.docker.com/r/arquivei/nginx-vts

docker pull下来,搞到docker harber里,待用。

2. K8S容器化部署

2.1 编写yaml文件

2.1.1 Nginx-vts.yml

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-withvts0422
namespace: zhongxin
spec:
replicas: 1
selector:
matchLabels:
app: nginx-withvts0422
template:
metadata:
labels:
app: nginx-withvts0422
spec:
containers:
- name: nginx-withvts
image: 172.21.9.35:30002/si-tech/skyscrapers/nginx
ports:
- containerPort: 80

2.1.2 Nginx-vts-service.yml

apiVersion: v1
kind: Service
metadata:
name: nginxvts-service0422
namespace: zhongxin
labels:
app: nginx-withvts0422
spec:
type: NodePort
selector:
app: nginx-withvts0422
ports:
- port: 80
targetPort: 80
nodePort: 32500

2.1.3  exporter-vts.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: exporter-vts0422
namespace: zhongxin
spec:
replicas: 1
selector:
matchLabels:
app: exporter-vts0422
template:
metadata:
labels:
app: exporter-vts0422
spec:
containers:
- name: exporter-vts
image: 172.21.9.35:30002/si-tech/nginx-vts-exporter:latest
command: ["/bin/sh", "-c", "--"]
args: ["nginx-vts-exporter -nginx.scrape_uri=http://100.101.253.136/status/format/json"]

注:args部分本人因为K8S水平有限,采取了hard-code,恳请批评指正! 

2.1.4 exporter-vts-service.yaml

apiVersion: v1
kind: Service
metadata:
name: export-vts-service0422
namespace: zhongxin
labels:
app: exporter-vts0422
spec:
type: NodePort
selector:
app: exporter-vts0422
ports:
- protocol: TCP
port: 9913
targetPort: 9913
nodePort: 32600

2.2 K8S加载

执行命令:

kubectl apply -f Nginx-vts.yml
kubectl apply -f Nginx-vts-service.yml
kubectl apply -f exporter-vts.yaml
kubectl apply -f exporter-vts-service.yaml

检查结果:

kubectl get pods -n zhongxin 
kubectl get service -n zhongxin

可以看到创建的pod和service,说明创建成功。

2.3 修改部分内容

2.3.1 检查vts模块

kubectl -it exec nginx-withvts0422-74658c884f-6fc6f -n zhongxin -- /bin/sh

进入pod内部

执行命令: nginx -V  # 结果里 找 --add-module=/usr/src/nginx-module-vts 如果有,则装了vts模块

2.3.2 修改Nginx配置

在容器内部:

vi /etc/nginx/ngnix.conf

## http { } 内添加如下内容:
vhost_traffic_status_zone; 
vhost_traffic_status_filter_by_host on;
server { 
location /status { 
 vhost_traffic_status_display; 
 vhost_traffic_status_display_format html; 
} 
location / {
root /usr/share/nginx/html; 
index index.html index.htm; 
}
} 

注:作者当前K8S不熟练,否则可以直接改docker file或者自己做一个image

随后执行

/ # /usr/sbin/nginx -s reload
2022/04/24 07:07:53 [notice] 116#116: signal process started

2.3.3 检查Nginx

2.3.3.1 验证Nignx-vts

访问Nginx: http://hostIP:32500/

// 中间那段 hahahha 是作者自己加上去的测试...

2.3.3.2 验证vts

访问status: http://hostIP:32500/status

至此,Nginx-vts验证完毕。

2.3.4 验证exporter

访问metrics: http://hostIP:32600/metrics

出现上面所示结果(部分展示,实际很长,篇幅有限)

至此,Nginx-vts-exporter容器、服务部署正常。

3. 配置Prometheus

3.1 编辑配置

进入Prometheus所在主机,编辑Prometheus.yml文件,

加入如下:

- job_name: 'nginx-vts'
static_configs:
- targets: ["172.21.6.22:32600"]

3.2 验证结果:

3.2.1 命令行验证:

# ./promtool check config prometheus.yml

出现类似如下结果,说明配置无误,可以重启Prometheus Checking prometheus.yml   SUCCESS: 0 rule files found

3.2.2 网页端验证:

至此,Prometheus部分配置完毕。

4. 配置Grafana

4.1 下载相应json

比如作者用的 2948 的dashboard

https://grafana.com/api/dashboards/2948/revisions/1/download

4.2 加载 dashboard

把刚才下载的2json文件内容直接贴进去

点击“load”,图形自动加载。

至此,Grafana配置完毕。记得保存一下Dashboard。

【完】


5. 传统的Prometheus监控Nginx

Prometheus监控通常需要使用exporter,Nginx的传统方式使用Nginx exporter,默认且常用的

原理:读取 Nginx status;例如:

Active connections: 3

server accepts handled requests

8 8 67

Reading: 0 Writing: 1 Waiting: 2

解释如下:

指标

含义

server

表示Nginx启动到现在共处理了多少个连接

accepts

表示Nginx启动到现在共成功创建多少次握手

handled requests

表示总共处理了多少次请求

Reading

Nginx 读取到客户端的 Header 信息数

Writing

Nginx 返回给客户端 Header 信息数

Waiting

Nginx 已经处理完正在等候下一次请求指令的驻留链接

K8S

编辑推荐

热门小说