Prometheus 的应用服务发现及黑河部署等
目录
promtool检查语法
部署Prometheus Server
检查语法是否规范
部署node-exporter
部署Consul
直接请求API进行服务注册
使用register命令注册服务(建议使用) 单个和多个注册,多个后面多加了s
在Prometheus上做consul的服务发现
部署Consul Exporter
在Prometheus上做Consul Exporter的服务发现 因为Prometheus是对Consul做的服务发现所以
部署MySQL Exporter
在Prometheus上做Consul Exporter的服务发现
部署nginx Exporter
在Prometheus上做Consul Exporter的服务发现
在Prometheus上做tomcat
tomcat允许远程登录
tomcat下载及扩充支持相应的功能
注册到consul上面去及Prometheus上做服务发现
署Blackbox Exporter 取决于黑盒监控
在Prometheus里面做黑河发现
- Record Rule: 保存在配置文件中,由Prometheus Server周期去评估,结果会生成一个时序数据,回存至TSDB,并支持查询
- Alert Rule: 布尔型告警表达式,保存在配置文件中,由Prometheus Server周期去评估,结果会生成一个时序数据,服务状态转换时,即会生成告警;
- 布尔型告警表达式:监控指标的值或其他相关条件来判断系统是否处于异常状态,并触发相应的告警。
record 记录规则,
- 当Prometheus里面用promQL写的规则执行文件,执行完成时,如果恰巧是grafana所需要的文件,就会直接在这里读取,而不是再从TSDB里面重新读取,从而省去大量IO
查询持久化:
把查询语句的执行结果长期保存;
记录规则:保存于配置文件,由Server自动在后台周期性执行;
evaluation_interval: 15s
promtool检查语法
./promtool check config prometheus.yml # promtool 可以用这命令检查语法
/usr/local/consul services register server02.json 注册consul的发现表
/usr/local/consul services dederegister -id server02.json 注销consul的发现表
https://prometheus.io/download/ 官网
部署Prometheus Server
下载程序包,以2.40.2版为例:
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.40.2/prometheus-2.40.2.linux-amd64.tar.gz
展开程序包:
tar xf prometheus-2.40.2.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/prometheus-2.40.2.linux-amd64 /usr/local/prometheus
创建用户,并设定目录权限:
useradd -r prometheus
mkdir /usr/local/prometheus/data
chown -R prometheus.prometheus /usr/local/prometheus/data
创建Systemd Unitfile,保存于/usr/lib/systemd/system/prometheus.service文件中:
[Unit]
Description=Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/[Service]
Restart=always
User=prometheus
EnvironmentFile=-/etc/default/prometheus
ExecStart=/usr/local/prometheus/prometheus \--config.file=/usr/local/prometheus/prometheus.yml \--storage.tsdb.path=/usr/local/prometheus/data \--web.console.libraries=/usr/share/prometheus/console_libraries \--web.enable-lifecycle \$ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
LimitNOFILE=8192[Install]
WantedBy=multi-user.target
如有必要,可创建环境配置文件/etc/default/prometheus,通过变量ARGS为prometheus指定启动参数
启动服务:
systemctl daemon-reload
systemctl start prometheus.service
systemctl enable prometheus.service
验证监听的端口,并测试访问其暴露的指标
ss -tnlp | grep '9090'
curl localhost:9090/metrics
修改配置后的重载命令:
curl -XPOST http://localhost:9090/-/reload
基于文件的服务发现
[root@rocky8 prometheus]#mkdir targets
[root@rocky8 targets]#vim nodes-linux.yml #以yml结尾就行,后续容易在Prometheus里面指定
- targets: #可以名字- 10.0.0.18:9100 - 10.0.0.8:9100labels: #标签。可以多个app: nede-exporter[root@rocky8 prometheus]#vim prometheus.yml- job_name: "node_exporter"metrics_path: '/metrics' #默认定义的输出路径scheme: 'http'file_sd_configs: #基于文件发现- files:- targets/nodes-*.yml #可以通配符refresh_interval: 2m
curl -XPOST http://localhost:9090/-/reload 定义完成之后可以重启
检查语法是否规范
[root@rocky8 prometheus]#./promtool check config ./prometheus.yml 可以检查语法是否规范
部署node-exporter
提示:每个主机节点上均应该部署node-exporter;
下载程序包,以1.4.0版本为例:
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
展开程序包:
tar xf node_exporter-1.4.0.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/node_exporter-1.4.0.linux-amd64 /usr/local/node_exporter
创建用户,若prometheus用户已经存在,可略过该步骤:
useradd -r prometheus
创建Systemd Unitfile,保存于/usr/lib/systemd/system/node_exporter.service文件中:
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter \--collector.ntp \--collector.mountstats \--collector.systemd \--collector.ethtool \--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always[Install]
WantedBy=multi-user.target
启动服务:
systemctl daemon-reload
systemctl start node_exporter.service
systemctl enable node_exporter.service
验证监听的端口,并测试访问其暴露的指标
ss -tnlp | grep '9100'
curl localhost:9100/metrics
部署Consul
组件功能:用于为Prometheus提供基于Consul进行服务发现的测试环境。
部署
下载Consul,以1.14.1版本为例:
curl -LO https://releases.hashicorp.com/consul/1.14.1/consul_1.14.1_linux_amd64.zip
展开程序包:
mkdir -p /usr/local/consul/{data,config} #给consul 保存配置文件和数据的目录
unzip consul_1.14.1_linux_amd64.zip -d /usr/local/consul
创建用户,若consul用户已经存在,可略过该步骤:
useradd -r consul
chown consul.consul /usr/local/consul/{data,config}
创建Systemd Unitfile,保存于/usr/lib/systemd/system/consul.service文件中:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/local/consul/consul agent -dev -bootstrap \-config-dir /usr/local/consul/config \-data-dir /usr/local/consul/data \-ui \-log-level INFO \-bind 127.0.0.1 \-client 0.0.0.0
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
启动服务:
systemctl daemon-reload
systemctl start consul.service
systemctl enable consul.service #开机自动
直接请求API进行服务注册
列出已经注册的服务:
curl -XGET http://localhost:8500/v1/agent/services
获取某个特定服务的配置信息:
curl -XGET http://localhost:8500/v1/agent/service/<SERVICE_ID>
例如,下面定义了一个要注册的tomcat服务示例,它保存于tomcat.json文件中
{"id": "tomcat","name": "tomcat","address": "tomcat","port": 8080,"tags": ["tomcat"],"checks": [{"http": "http://tomcat:8080/metrics","interval": "5s"}]
}
我们可以使用类似如下命令完成服务注册。
curl -XPUT --data @tomcat.json http://localhost:8500/v1/agent/service/register
注销某个服务:
curl -XPUT http://localhost:8500/v1/agent/service/deregister/<SERVICE_ID>
使用register命令注册服务(建议使用) 单个和多个注册,多个后面多加了s
consul services register命令也可用于进行服务注册,只是其使用的配置格式与直接请求HTTP API有所不同。
-address=XXX 指明服务器地址,不指默认本地
-port=xx 指定服务的端口号
consul services register /path/to/pyload_file.json
注册单个服务时,使用service进行定义,注册多个服务时,使用services以列表格式进行定义。下面的示例定义了单个要注册的服务。
{"service": {"id": "tomcat","name": "tomcat","address": "tomcat","port": 8080,"tags": ["tomcat"],"checks": [{"http": "http://tomcat:8080/metrics","interval": "5s"}]}
}
下面的示例,以多个的服务的格式给出了定义。
{"services": [{"id": "tomcat","name": "tomcat","address": "tomcat","port": 8080,"tags": ["tomcat"],"checks": [{"http": "http://tomcat:8080/metrics","interval": "5s"}]}]
}
注销服务,也可以使用consul services deregister命令进行。
consul services deregister -id <SERVICE_ID>
在Prometheus上做consul的服务发现
在consul上可以正常查到相关节点后,在Prometheus.yml上增加相关配置
- job_name: "node_exporter"consul_sd_configs:- server: '10.0.0.8:8500'tags:- "node_exporter" #只有consul里带有该标签的服务才会被 Prometheus 发现和监控refresh_interval: 1m[root@rocky8 prometheus]#curl -XPOST localhost:9090/-/reload #重启
部署Consul Exporter
提示:仅需要为每个Consul实例部署consul-exporter,它负责将Consul的状态信息转为Prometheus兼容的指标格式并予以暴露。
下载程序包,以0.8.0版本为例:
curl -LO https://github.com/prometheus/consul_exporter/releases/download/v0.8.0/consul_exporter-0.8.0.linux-amd64.tar.gz
展开程序包:
tar xf consul_exporter-0.8.0.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/consul_exporter-0.8.0.linux-amd64 /usr/local/consul_exporter
创建用户,若consul用户已经存在,可略过该步骤:
useradd -r consul
创建Systemd Unitfile,保存于/usr/lib/systemd/system/consul_exporter.service文件中:
[Unit]
Description=consul_exporter
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
Type=simple
User=consul
EnvironmentFile=-/etc/default/consul_exporter
# 具体使用时,若consul_exporter与consul server不在同一主机时,consul server要指向实际的地址;
ExecStart=/usr/local/consul_exporter/consul_exporter \--consul.server="http://localhost:8500" \--web.listen-address=":9107" \--web.telemetry-path="/metrics" \--log.level=info \$ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always[Install]
WantedBy=multi-user.target
启动服务:
systemctl daemon-reload
systemctl start consul_exporter.service
systemctl enable consul_exporter.service
在Prometheus上做Consul Exporter的服务发现 因为Prometheus是对Consul做的服务发现所以
Consul Exporter用于监控Consul万一consul崩了呢
[root@rocky8 services]#cat consul-exporter.json
{"id": "consul_exporter","name": "consul_exporter.magedu.com","address": "prometheus.magedu.com","port": 9107,"tags": ["consul_exporter"],"checks": [{"http":"http://prometheus.magedu.com:9107/metrics","interval": "5s"}]
}[root@rocky8 prometheus]#vim prometheus.yml- job_name: "consul_exporter"consul_sd_configs:- server: '10.0.0.8'tags:- "consul_exporter"refresh_interval: 1m
加入服务注册
curl -XPUT --data @consul-exporter.json http://localhost:8500/v1/agent/service/registercurl -XGET http://localhost:8500/v1/agent/services 查看
部署MySQL Exporter
提示:仅需要为每个MySQL Server实例部署mysql-exporter,它负责将MySQL Server的状态信息转为Prometheus兼容的指标格式并予以暴露。
下载程序包,以0.14.0版本为例:
curl -LO https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
展开程序包:
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
创建用户,或mysql用户已经存在,可略过该步骤:
useradd -r mysql
创建Systemd Unitfile,保存于/usr/lib/systemd/system/mysqld_exporter.service文件中:
[Unit]
Description=consul_exporter
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
Type=simple
User=mysql
EnvironmentFile=-/etc/default/mysqld_exporter
# 具体使用时,若mysql_exporter与mysql server不在同一主机时,mysql server要指向实际的地址;
# mysql_exporter连接mysql server使用的用户名和密码均为exporter,该用户要获得正确的授权;
Environment='DATA_SOURCE_NAME=exporter:exporter@(localhost:3306)'
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \--web.listen-address=":9104" \--web.telemetry-path="/metrics" \--collect.info_schema.innodb_tablespaces \--collect.info_schema.innodb_metrics \--collect.global_status \--collect.global_variables \--collect.slave_status \--collect.engine_innodb_status \$ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always[Install]
WantedBy=multi-user.target
在mysqld server上添加用户,并授权其能够加载mysql的信息并转换为指标输出。需要注意的是用户账号授权时使用的主机范围。
mysql> CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'exporter';
mysql> GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'localhost';
mysql> GRANT SELECT ON performance_schema.* TO 'exporter'@'localhost';
mysql> FLUSH PRIVILEGES;
启动服务:
systemctl daemon-reload
systemctl start mysqld_exporter.service
systemctl enable mysqld_exporter.service
在Prometheus上做Consul Exporter的服务发现
[root@rocky8 services]#cat mysqld_exporter.json
{"id": "mysqld_exporter","name": "mysqld_exporter.magedu.com","address": "prometheus.magedu.com","port": 9107,"tags": ["mysqld_exporter"],"checks": [{"http":"http://prometheus.magedu.com/metrics","interval": "5s"}]
}[root@rocky8 prometheus]#vim prometheus.yml- job_name: "mysqld_exporter"consul_sd_configs:- server: "10.0.0.8"tags:- "mysqld_exporter"refresh_interval: 1m
加入服务注册
curl -XPUT --data @mysqld_exporter.json http://localhost:8500/v1/agent/service/registercurl -XGET http://localhost:8500/v1/agent/services 查看
部署nginx Exporter
基于镜像
version: '3.6'networks:monitoring:driver: bridgeipam:config:- subnet: 172.31.107.0/24services:nginx:image: nginx:1.22.1volumes: - ./nginx/stub_status-server.conf:/etc/nginx/conf.d/stub_status-server.conf:ro #定义·文件夹networks:- monitoringexpose:- 8080- 80ports:- 80:80nginx-exporter:image: nginx/nginx-prometheus-exporter:0.11command:- '-nginx.scrape-uri=http://nginx:8080/stub_status'networks:- monitoringports:- '9113:9113'depends_on:- nginx
~
[root@rocky8 nginx-and-exporter]#ls
docker-compose.yml nginx
[root@rocky8 nginx-and-exporter]#vim docker-compose.yml
[root@rocky8 nginx-and-exporter]#tree nginx/
nginx/
└── stub_status-server.conf0 directories, 1 file[root@rocky8 nginx-and-exporter]#cat nginx/stub_status-server.conf
server {listen 8080;server_name localhost;
文件·location /stub_status {stub_status;access_log off;#allow 172.31.0.0/16;#deny all;}
}
启动
[root@rocky8 nginx-and-exporter]#docker-compose up
/usr/local/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core
在Prometheus上做Consul Exporter的服务发现
[root@rocky8 services]#/usr/local/consul/consul services register nginx-exporter.json
curl -XGET http://localhost:8500/v1/agent/services 查看
[root@rocky8 services]#cat nginx-exporter.json
{"service":{"id": "nginx_exporter","name": "nginx_exporter.magedu.com","address": "server02.magedu.com","port": 9113,"tags": ["nginx_exporter"],"checks": [{"http": "http://server02.magedu.com:9113/metrics","interval": "5s"}]}
}[root@rocky8 services]#cat prometheus.yml- job_name: "nginx_exporter"consul_sd_configs:- server: "10.0.0.8:8500"tags:- "nginx_exporter"refresh_interval: 1m
[root@rocky8 prometheus]#curl -XPOST localhost:9090/-/reload 刷新在Prometheus上面查看
在Prometheus上做tomcat
[root@rocky8 tomcat-and-metrics]#ls
docker-compose.yml tomcat
[root@rocky8 tomcat-and-metrics]#cat docker-compose.yml #安装
version: '3.6'volumes:tomcat_webapps: {}networks:monitoring:driver: bridgeipam:config:- subnet: 172.31.130.0/24services:tomcat:#image: tomcat:jdk11build:context: tomcatdockerfile: Dockerfile hostname: tomcat.magedu.comexpose:- 8080ports:- 8080:8080volumes:- tomcat_webapps:/usr/local/tomcat/webapps- ./tomcat/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xmlnetworks:- monitoringenvironment:TZ: Asia/Shanghai
[root@rocky8 tomcat-and-metrics]#cd tomcat/[root@rocky8 tomcat]#ls
context.xml Dockerfile sources.list tomcat-users.xml[root@rocky8 tomcat]#cat tomcat-users.xml #tomcat账户配置
<?xml version="1.0" encoding="UTF-8"?>
<!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License. You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
-->
<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0">
<!--By default, no user is included in the "manager-gui" role requiredto operate the "/manager/html" web application. If you wish to use this app,you must define such a user - the username and password are arbitrary.Built-in Tomcat manager roles:- manager-gui - allows access to the HTML GUI and the status pages- manager-script - allows access to the HTTP API and the status pages- manager-jmx - allows access to the JMX proxy and the status pages- manager-status - allows access to the status pages onlyThe users below are wrapped in a comment and are therefore ignored. If youwish to configure one or more of these users for use with the manager webapplication, do not forget to remove the <!.. ..> that surrounds them. Youwill also need to set the passwords to something appropriate.
-->
<!--<user username="admin" password="<must-be-changed>" roles="manager-gui"/><user username="robot" password="<must-be-changed>" roles="manager-script"/>
-->
<!--The sample user and role entries below are intended for use with theexamples web application. They are wrapped in a comment and thus are ignoredwhen reading this file. If you wish to configure these users for use with theexamples web application, do not forget to remove the <!.. ..> that surroundsthem. You will also need to set the passwords to something appropriate.
-->
<!--<role rolename="tomcat"/><role rolename="role1"/><user username="tomcat" password="<must-be-changed>" roles="tomcat"/><user username="both" password="<must-be-changed>" roles="tomcat,role1"/><user username="role1" password="<must-be-changed>" roles="role1"/>
--><role rolename="manager-gui"/><role rolename="manager-script"/><user username="tomcat" password="magedu.com" roles="manager-gui,manager-script"/>
</tomcat-users>
tomcat允许远程登录
[root@rocky8 tomcat]#cat context.xml 允许远程登录
<?xml version="1.0" encoding="UTF-8"?>
<!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License. You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" ><CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"sameSiteCookies="strict" />
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
--><Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
tomcat的镜像仓库地址
[root@rocky8 tomcat]#cat sources.list
deb https://repo.huaweicloud.com/debian/ bullseye main non-free contrib
deb-src https://repo.huaweicloud.com/debian/ bullseye main non-free contrib
deb https://repo.huaweicloud.com/debian-security/ bullseye-security main
deb-src https://repo.huaweicloud.com/debian-security/ bullseye-security main
deb https://repo.huaweicloud.com/debian/ bullseye-updates main non-free contrib
deb-src https://repo.huaweicloud.com/debian/ bullseye-updates main non-free contrib
deb https://repo.huaweicloud.com/debian/ bullseye-backports main non-free contrib
deb-src https://repo.huaweicloud.com/debian/ bullseye-backports main non-free contrib
tomcat下载及扩充支持相应的功能
[root@rocky8 tomcat]#cat Dockerfile
FROM tomcat:9.0-jdk17-openjdk-slimADD ./sources.list /etc/apt/sources.listENV TOMCAT_SIMPLECLIENT_VERSION=0.12.0
ENV TOMCAT_EXPORTER_VERSION=0.0.15RUN apt-get update && apt-get install -y curl && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient-${TOMCAT_SIMPLECLIENT_VERSION}.jar --output /usr/local/tomcat/lib/simpleclient-${TOMCAT_SIMPLECLIENT_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_common/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar --output /usr/local/tomcat/lib/simpleclient_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_hotspot/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_hotspot-${TOMCAT_SIMPLECLIENT_VERSION}.jar --output /usr/local/tomcat/lib/simpleclient_hotspot-${TOMCAT_SIMPLECLIENT_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_servlet/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_servlet-${TOMCAT_SIMPLECLIENT_VERSION}.jar --output /usr/local/tomcat/lib/simpleclient_servlet-${TOMCAT_SIMPLECLIENT_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=io/prometheus/simpleclient_servlet_common/${TOMCAT_SIMPLECLIENT_VERSION}/simpleclient_servlet_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar --output /usr/local/tomcat/lib/simpleclient_servlet_common-${TOMCAT_SIMPLECLIENT_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=nl/nlighten/tomcat_exporter_client/${TOMCAT_EXPORTER_VERSION}/tomcat_exporter_client-${TOMCAT_EXPORTER_VERSION}.jar --output /usr/local/tomcat/lib/tomcat_exporter_client-${TOMCAT_EXPORTER_VERSION}.jar && \curl -v --fail --location https://search.maven.org/remotecontent?filepath=nl/nlighten/tomcat_exporter_servlet/${TOMCAT_EXPORTER_VERSION}/tomcat_exporter_servlet-${TOMCAT_EXPORTER_VERSION}.war --output /usr/local/tomcat/webapps/metrics.warRUN mv /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
ADD ./context.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml
注册到consul上面去及Prometheus上做服务发现
[root@rocky8 services]#/usr/local/consul/consul services register tomcat.json
Node name "rocky8.wang.org" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
Registered service: tomcat.magedu.com[root@rocky8 services]#cat tomcat.json
{"service":{"id": "tomcat","name": "tomcat.magedu.com","address": "server02.magedu.com","port": 8080,"tags": ["tomcat"],"checks": [{"http": "http://server02.magedu.com:8080/metrics","interval": "5s"}]}
}[root@rocky8 prometheus]#cat prometheus.yml- job_name: "tomcat"consul_sd_configs:- server: "10.0.0.8:8500"tags:- "tomcat"refresh_interval: 1m[root@rocky8 prometheus]#curl -XPOST localhost:9090/-/reload 重新加载
署Blackbox Exporter 取决于黑盒监控
提示:仅需要部署的Blackbox Exporter实例数据,取决于黑盒监控的任务量及节点的可用资源。
[root@rocky8 blackbox-exporter]#cat configs/blackbox.yml
modules:# https://github.com/prometheus/blackbox_exporter/blob/master/example.ymlhttp_2xx:prober: httptimeout: 5shttp:valid_http_versions: - "HTTP/1.1"- "HTTP/2"valid_status_codes: [] # Defaults to 2xxenable_http2: falsemethod: GETno_follow_redirects: false# fail_if_ssl为true时,表示如果站点启用了SSL则探针失败,反之成功; # fail_if_not_ssl刚好相反;fail_if_ssl: falsefail_if_not_ssl: false# fail_if_body_matches_regexp, fail_if_body_not_matches_regexp, fail_if_header_matches, fail_if_header_not_matches# 可以定义一组正则表达式,用于验证HTTP返回内容是否符合或者不符合正则表达式的内容fail_if_body_matches_regexp:- "Could not connect to database"tls_config:insecure_skip_verify: falsepreferred_ip_protocol: "ip4" # defaults to "ip6"http_with_proxy:prober: httphttp:proxy_url: "http://127.0.0.1:3128"skip_resolve_phase_with_proxy: truehttp_post_2xx:prober: httptimeout: 5shttp:method: POSTheaders:Content-Type: application/jsonbody: '{}'http_basic_auth_example:prober: httptimeout: 5shttp:method: POSTheaders:Host: "login.example.com"basic_auth:username: "username"password: "mysecret"http_custom_ca_example:prober: httphttp:method: GETtls_config:ca_file: "/certs/my_cert.crt"http_gzip:prober: httphttp:method: GETcompression: gziphttp_gzip_with_accept_encoding:prober: httphttp:method: GETcompression: gzipheaders:Accept-Encoding: gziptls_connect:prober: tcptimeout: 5stcp:tls: truedns_udp_example:prober: dnstimeout: 5sdns:query_name: "www.prometheus.io"query_type: "A"valid_rcodes:- NOERRORvalidate_answer_rrs:fail_if_matches_regexp:- ".*127.0.0.1"fail_if_all_match_regexp:- ".*127.0.0.1"fail_if_not_matches_regexp:- "www.magedu.com.\t300\tIN\tA\t127.0.0.1"fail_if_none_matches_regexp:- "127.0.0.1"validate_authority_rrs:fail_if_matches_regexp:- ".*127.0.0.1"validate_additional_rrs:fail_if_matches_regexp:- ".*127.0.0.1"
[root@rocky8 blackbox-exporter]#ls
configs docker-compose.yml
[root@rocky8 blackbox-exporter]#cat docker-compose.yml
version: '3.6'networks:monitoring:driver: bridgeipam:config:- subnet: 172.31.136.0/24services:blackbox_exporter:image: prom/blackbox-exporter:v0.24.0volumes:- ./configs/:/etc/blackboxexporter/command:- '--config.file=/etc/blackboxexporter/blackbox.yml'networks:- monitoringports:- 9115:9115
在Prometheus里面做黑河发现
[root@rocky8 prometheus]#cat prometheus.yml# Blackbox Exporter- job_name: 'blackbox'metrics_path: /probeparams:module: [http_2xx] # Look for a HTTP 200 response.static_configs:- targets:- www.magedu.com- www.google.comrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: "10.0.0.18:9115" # Blackbox exporter.- target_label: regionreplacement: "remote"[root@rocky8 prometheus]#curl -XPOST localhost:9090/-/reload #加载
相关文章:

Prometheus 的应用服务发现及黑河部署等
目录 promtool检查语法 部署Prometheus Server 检查语法是否规范 部署node-exporter 部署Consul 直接请求API进行服务注册 使用register命令注册服务(建议使用) 单个和多个注册,多个后面多加了s 在Prometheus上做consul的服务发现 部署…...

JAVA SE -- 第十二天
(全部来自“韩顺平教育”) 常用类 一、包装类 1、包装类的分类 ①针对八种基本数据类型相应的引用类型--包装类 ②有了类的特点,就可以调用类中的方法 ③ 基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintInteger…...

实战:工作中对并发问题的处理
大家好,我是 方圆。最近在接口联调时发生了数据并发修改问题,我想把这个问题讲解一下,并把当时提出的解决方案进行实现,希望它能在大家以后在遇到同样的问题时提供一些借鉴和思考的方向。原文还是收录在我的 Github: enthusiasm 中…...

腾讯云Cloud Studio:基于Claude快速完成Excel工资自动核算
目录 1 什么是Cloud Studio?2 注册与代码管理2.1 账号注册2.2 Git关联 3 实战:Excel工资自动核算3.1 创建项目与配置3.2 “念咒师”Claude GPT3.3 代码编写与运行 1 什么是Cloud Studio? Cloud Studio是腾讯云为开发者提供的一个基于浏览器的…...

Spring Boot OAuth2 快速入门示例
系统要求 Spring Authorization Server 需要JDK1.8及以上版本。 项目搭建 使用在线项目初始化器 https://start.spring.io/ 生成项目[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljKbMI4H-1690726855433)(images/screenshot_1690602511482.png)…...

MethodInterceptor
目录 1 MethodInterceptor 1.1 HandleSync 1.2 HandleException 1.3 /// This will be called via Reflection MethodInterceptor HandleSync private void HandleSync(IReadOnlyList<MethodFilterAttribute> filterAttributes, IReadOnlyList<ExceptionFilte…...

PID模块化__以stm32直流电机速度为例
文章目录 前言一、相关PID源码.c.h 二、如何使用1.创建变量2.初始化3.运算4.修改pid参数 总结 前言 本篇使用到的基于这个STM32CubeMX 直流电机PID速度控制、HAL库、cubemx、PID、速度控制、增量式 由于上次使用的pid没有模块化,当多出使用pid的时候就会很麻烦 所以…...

Java ~ Collection/Executor ~ DelayQueue【总结】
前言 文章 相关系列:《Java ~ Collection【目录】》(持续更新)相关系列:《Java ~ Executor【目录】》(持续更新)相关系列:《Java ~ Collection/Executor ~ DelayQueue【源码】》(学…...

前端高级面试题-安全相关
1 XSS 跨⽹站指令码(英语: Cross-site scripting ,通常简称为: XSS )是⼀种⽹站应⽤程式的安全漏洞攻击,是代码注⼊的⼀种。 它允许恶意使⽤者将程式码注⼊到⽹⻚上,其他使⽤者在观看⽹⻚时就会…...

【前缀和】560.和为 K 的子数组
Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 和为K的子数组 题目:示例:题解:解法一:解法二: 题目: 示例: 题解: 解法一: 暴力解法:我们很容易想到通过两个for循环去遍…...

【Docker】安全及日志管理
安全及日志管理 Docker 安全及日志管理一:Docker 容器与虚拟机的区别1. 隔离与共享2. 性能与损耗 二:Docker 存在的安全问题1.Docker 自身漏洞2.Docker 源码问题 三:Docker 架构缺陷与安全机制1. 容器之间的局域网攻击2. DDoS 攻击耗尽资源3.…...

基于x-scan扫描线的3D模型渲染算法
基于x-scan算法实现的z-buffer染色。c#语言,.net core framework 3.1运行。 模型是读取3D Max的obj模型。 x-scan算法实现: public List<Vertex3> xscan() {List<Vertex3> results new List<Vertex3>();SurfaceFormula formula g…...

LeetCode36.Valid-Sudoku<有效的数独>
题目: 思路: 这题并不难,它类似于N皇后问题。在N皇后问题中,行,列,对角线,写对角线,都不能出现连续的皇后。 本题类似,不过他是行,列,还有一个B…...

Linux中的pause函数
2023年7月29日,周六上午 函数原型 在Linux中,pause()函数用于使当前进程暂停执行,直到接收到一个信号。 #include <unistd.h>int pause(void);pause()函数不接受任何参数。 通常,pause()函数用于编写简单的信号处理程序&…...

CommonCollections6链分析
前面和CC1一样 优点是不限制jdk版本和cc的版本 先开一个ChainedTransformer 然后创LazyMap 我们顺便执行一下避免上面写错 能弹计算器 没问题 后面就是CC6不同的地方了 我们需要一个TiedMapEntry 因为需要一个类调用了get方法 在TiedMapEntry的getValue()方法中调用了get()…...

优化基于tcp,socket的ftp文件传输程序
原始程序: template_ftp_server_old.py: import socket import json import struct import os import time import pymysql.cursorssoc socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST 192.168.31.111 PORT 4101 soc.bind((HOST,PORT)) p…...

MySQL 数据库 【增删查改(二)】
目录 一、表的设计 1、一对一 2、一对多 3、多对多 二、新增 三、查询 1、聚合查询 (1)聚合函数: (2) group by 子句 (3)having 2、联合查询 (1)内连接 (2)外连接 (3)自链接 (4)…...

力扣 -- 978. 最长湍流子数组
一、题目 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:int maxTurbulenceSize(vector<int>& nums) {int nnums.size();vector<int> f(n);…...

甘特图 Dhtmlx Gantt
介绍 在一些任务计划、日程进度等场景中我们会使用到甘特图,Dhtmlx Gantt 对于甘特图的实现支持很友好,文档API介绍全面,虽然增强版的收费,但免费版的足以够用。 官网:https://docs.dhtmlx.com/gantt/ 安装dhtml gannt…...

iOS 应用上架流程详解
iOS 应用上架流程详解 欢迎来到我的博客,今天我将为大家分享 iOS 应用上架的详细流程。在这个数字化时代,移动应用已经成为了人们生活中不可或缺的一部分,而 iOS 平台的 App Store 则是开发者们发布应用的主要渠道之一。因此,了解…...

Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务
文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多,新手可以看下 《【MQTT】Esp32数据上传采集:最新mqtt插件(支…...

【C语言初阶】指针篇—上
目录 1. 指针是什么?2. 指针和指针类型2.1 指针-整数2.2 指针的解引用 3. 野指针3.1 野指针成因1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 3.2 如何规避野指针 1. 指针是什么? 指针是什么? 指针理解的2个要点: > 1…...

基于FasterRCNN深度学习网络的车辆检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................................... % 训练Faster R-…...

机器学习深度学习——多层感知机
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——感知机 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 上一节…...

Django模型将模型注释同步到数据库
1、安装django-comment-migrate库 pip install django-comment-migrate 2、将库注册到settings.py文件中 INSTALLED_APPS [...django_comment_migrate, # 表注释... ] 3、加注释 3.1、给模型(表)加注释 在模型的class Meta中编辑 verbose_name&…...

STM32 Flash学习(二)
STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。 锁定解函数 对FLASH进行写操作前必须先解锁,解锁操作:在FLA…...

kotlin获取泛型集合的类型信息
通过 reified 关键字和内联函数来实现 inline fun <reified T> getClassFromList(list: List<T>): Class<T> {return T::class.java }fun main() {val list listOf("Hello", "World")val clazz getClassFromList(list)println(clazz)…...

AQS源码解析
关于 AQS,网上已经有无数的文章阐述 AQS 的使用及其源码,所以多这么一篇文章也没啥所谓,还能总结一下研究过的源码。源码解析和某某的使用,大概是互联网上 Java 文章中写得最多的主题了。 AQS AQS 是 AbstractQueuedSynchronize…...

关于在VS2017中编译Qt项目遇到的问题
关于在VS2017中编译Qt项目遇到的问题 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。如何在VS2017里部署的Qt Designer上编辑槽函数 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。 链接 如何在VS2017里部署的Qt Design…...