版本: 1.0.0
前言
- Prometheus是一个开源的系统监控和报警的工具包,最初由SoundCloud发布。
- 特点:
- 1.多维数据模型(有metric名称和键值对确定的时间序列)
- 2.灵活的查询语言
- 3.不依赖分布式存储
- 4.通过pull方式采集时间序列,通过http协议传输
- 5.支持通过中介网关的push时间序列的方式
- 6.监控数据通过服务或者静态配置来发现
- 7.支持图表和dashboard等多种方式
- 特点:
- 组件:
- Prometheus 主程序,主要是负责存储、抓取、聚合、查询方面。
- Alertmanager 程序,主要是负责实现报警功能。
- Pushgateway 程序,主要是实现接收由Client-push过来的指标数据,在指定的时间间隔,由主程序来抓取。
- *_exporter 这类是不同系统已经实现了的集成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ArUXgqsz-1576472446434)(https://note.youdao.com/yws/res/1907/456EE7C75FDB45198DEC1AA3494F22ED)]
Prometheus的安装
- 由于不可说的原因,在这里不是用docker进行安装。以下的安装均使用传统方式进行安装
- 在这里安装prometheus的版本为: prometheus-2.8.1.linux-amd64.tar.gz
Promethues 搭建
- 公司grafana安装在服务器:http://ip:3000
- promethues安装在: 服务器http://ip:9090
//第一步 解压下载后的文件
tar zxvf prometheus‐*.tar.gz
//第二步 将解压后的文件移动的/server下。
mv prometheus‐2.8.1.linux‐amd64 /server/
// 第三步 进入解压后的目录中
cd prometheus
- 进入解压后的目录中,对promethues.yml文件进行修改,修改后的文件为:
# my global config
global:
scrape_interval: 15s # 默认为15s,用于设置每次数据收集的间隔.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ["ip:9093"]
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/server/prometheus/server-node.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus-server'
static_configs:
- targets: ['ip:9090']
#数据库oracle监控
- job_name: 'hzpt-oracle-datasource'
static_configs:
- targets: ['ip:9161']
#服务器监控
- job_name: 'server-node'
scrape_interval: 10s
file_sd_configs:
- files:
- /server/prometheus/conf.d/server.json
#中间件监控
- job_name: 'middleware-node'
scrape_interval: 10s
file_sd_configs:
- files:
- /server/prometheus/conf.d/middleware.json
#nacos服务注册监控
- job_name: 'nacos'
scrape_interval: 10s
metrics_path: '/nacos/actuator/prometheus'
file_sd_configs:
- files:
- /server/prometheus/conf.d/data-nacos.json
#数据中台数据接口网关
- job_name: 'dsp-api-gateway'
metrics_path: '/actuator/prometheus'
scrape_interval: 10s
file_sd_configs:
- files:
- /server/prometheus/conf.d/credit-data.json
#数据中台数据接口fuw
- job_name: 'das-api'
metrics_path: '/das/actuator/prometheus'
scrape_interval: 10s
file_sd_configs:
- files:
- /server/prometheus/conf.d/credit-data-api.json
#乐惠分2.0接口api监控
- job_name: 'credit-api-2.0'
metrics_path: '/credit-lhf/actuator/prometheus'
file_sd_configs:
- files:
- /server/prometheus/conf.d/credit-points.json
- 配置json文件
在prometheus目录下创建conf.d文件夹。然后分别创建credit-points.json、credit-data-api.json、credit-data.json、server.json。这里取server.json和credit-points.json文件配置- server.json.
[
{
"targets": ["ip:9100"],
"labels": {
"hostname": "redis-node-1"
}
},
{
"targets": ["ip:9100"],
"labels": {
"hostname": "credit-api-100"
}
}
]
- credit-points.json.
[
{
"targets": ["ip:8700"],
"labels": {
"hostname": "credit-api-1"
}
},
{
"targets": ["ip:8700"],
"labels": {
"hostname": "credit-api-2"
}
}
]
- 启用promethues
nohup ./prometheus ‐‐config.file=prometheus.yml & (&代表后台启动)
- 启动后默认端口为:9090.
- 释放端口:
- centos7:
添加 firewall-cmd --zone=public --add-port=80/tc--permanent
重新载入 firewall-cmd --reload
查看 firewall-cmd --zone= public --query-port=80/tcp
删除 firewall-cmd --zone= public --remove-port=80/tcp --permanent
- centos6:
/sbin/iptables -I INPUT -p tcp --dport 9090 -j ACCEPT
/etc/rc.d/init.d/iptables save
Granfana安装
//测试环境先可以联网,可以使用该命令。但是生产环境下,无法连接外网。需要下载本地下载好后上传到服务器
wget https://dl.grafana.com/oss/release/grafana-6.1.6-1.x86_64.rpm
sudo yum localinstall grafana-6.1.6-1.x86_64.rpm
启动服务service grafana-server start
Prometheus监控redis
将redis_export放入目录 /server/redis_export下。
有密码的redis:
./redis_exporter -redis.addr 192.168.10.78:6379 -redis.password wangyu & (启动可以时集群,也可以是单机。)
下面的启动 默认监听本机的6379端口的redis:
nohup ./redis_export& 后台启动 (9121对外端口)
将redis_export放入目录 /server/redis_export下。
有密码的redis:
./redis_exporter -redis.addr 192.168.10.78:6379 -redis.password wangyu & (启动可以时集群,也可以是单机。)
下面的启动 默认监听本机的6379端口的redis:
nohup ./redis_export& 后台启动 (9121对外端口)
注意: 释放端口 9121端口
Prometheus监控oracle数据库
注意: 版本的不同,生产的目录也不同。公司目前使用的是18.3版本。
- 下载oracle客户端安装包(linux版)到ip服务器上。
- 运行 rpm -ivhoracle-instantclient12.1-basic-18.3.rpm ,安装oracle客户端。
包文件:/usr/lib/oracle/18.3/client64/ 下,包含{bin、lib}两个文件夹.
- 创建文件夹
mkdir -p /usr/lib/oracle/18.3/client64/network/admin/
- 创建监听文件,并添加内容
vim /usr/lib/oracle/18.3/client64/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = *IP*)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *SID*)
)
)
注意: 缩进不要用tab键,不然会出现莫名其妙的问题。
5. 配置环境变量
vim ~/.bashrc
–根目录下为全局使用,为限制用户权限,可只修改某一用户的环境变量
export ORACLE_HOME=/usr/lib/oracle/18.3/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='simplified chinese_china'.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
- 使配置完的环境变量生效
source ~/.bashrc
- 执行以下命令为oracledb_exporter.linux-amd64赋权
1. tar -zvxf oracledb_exporter.linux-amd64.tar.gz
//统一将软件安装的一定的目录
2.mv oracledb_exporter.linux-amd64/ /server/
//修改权限
3. chmod +x oracledb_exporter.linux-amd64
- 再设置执行的环境变量,命令行直接执行如下命令export:
export DATA_SOURCE_NAME=用户名/密码@ 数据库服务名
- 启动 oracledb_exporter.linux-amd64
nohup ./oracledb_exporter &
注意: 释放端口 9161端口
- 在prometheus中修改prometheus.yml文件。
- job_name: oracle
static_configs:
- targets: ['ip:9161']
labels:
instance: oracle
Prometheus监控服务器 node_export
为了更好的演示 Prometheus 从配置,到监控,到报警的功能,本实例将引入本机 ubuntu server 的监控。由于 Prometheus 主要用于监控 web 服务,如果需要监控 ubuntu server,则需要在本机上安装 node exporter。 Node exporter 主要用于暴露 metrics 给 Prometheus,其中 metrics 包括:cpu 的负载,内存的使用情况,网络等。
// 将node-export放入目录
tar -zxvf node-export-*.tar.gz
// 将解压后的文件移动到server目录下
mv node-exprot-*/ /server/
// 启动即可
nohup ./node_exporter & 后台启动
注意: 释放端口 9100
Prometheus监控elasticsearch (elasticsearch_export)
// 将elasticsearch_export放入目录
tar -zxvf elasticsearch_export-*.tar.gz
// 将解压后的文件移动到server目录下
mv elasticsearch_export-*/ /server/
// 启动即可
nohup ./elasticsearch_exporter --es.uri http://ip:9200 &
注意: 释放端口 9108
Prometheus报警系统的实现
- 安装alertmanager插件:
// 使用的版本是:0.16.2
tar -zxvf alertmanager-0.16.2.linux-amd64.tar.gz
// 将其放入prometheus目录下便于管理
mv alertmanger-0.16.2.linux-amd64/ /server/prometheus/
- 修改alertmanager.yml文件
#没有匹配到子节点的警报,会默认匹配到根节点上
#接下来是子节点的配置
routes:
#乐惠分服务器监控
- receiver: credit-server-node
group_wait: 5m
repeat_interval: 4h
match:
team: credit-server-node
#中台服务器监控
- receiver: data-server-node
group_wait: 5m
repeat_interval: 4h
match:
team: data-server-node
#定义报警接收者信息
receivers:
- name: 'default'
#邮箱配置
email_configs:
- to: 'wangm@creditstate.cn,xuzk@creditstate.cn'
#邮件内容模版
html: '{{ template "points.html" . }}'
#接收邮件的标题
headers: { Subject: "[服务器监控失败] 告警监控"}
send_resolved: true
#乐惠分
- name: 'credit-server-node'
email_configs:
- to: 'wangm@creditstate.cn,xuzk@creditstate.cn'
html: '{{ template "points.html" . }}'
headers: { Subject: "【服务器监控失败】 告警监控"}
send_resolved: true
#中台服务器
- name: 'data-server-node'
email_configs:
- to: 'kaiy@creditstate.cn,xuzk@creditstate.cn'
html: '{{ template "points.html" . }}'
headers: { Subject: "【服务器监控失败】 告警监控"}
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
注意: smtp_auth_password: ‘wang8251426’ 这里密码不是邮箱的登录密码,是邮箱的授权密码。
- 创建模版
在alertmanager目录下创建目录: template目录
在此目录下创建文件points.tmpl
{{ define "points.html" }}
<table border="1">
<tr>
<td>报警项</td>
<td>实例</td>
<td>报警阀值</td>
<td>报警描述</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "value" }}</td>
<td>{{ index $alert.Annotations "description"}}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
{{ end }}
4.启动
nohup ./alertmanager &
注意: 释放端口 9093
以上监控是通过Promethues进行监控。在granfa中的展示数据若是折线图的话我们可以通过granafa进行监控。具体通过如下实现:
1、进入grafana目录中
cd /etc/grafana
2.修改配置文件
vim grafana.ini
修改文件
enabled = true
host = smtp.mxhichina.com:25
user = jkxt@creditstate.cn
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
password = Hgzx@2019
;cert_file =
;key_file =
skip_verify = true
from_address = jkxt@creditstate.cn
from_name = credit-grafana
;# EHLO identity in SMTP dialog (defaults to instance_name)
;;ehlo_identity = dashboard.example.com
然后重启service grafana restart