https://www.alibabacloud.com/blog/600909
1. windows_exporter
1.1 介绍
既能收集win机器指标,又能收集SqlServer
- 默认安装到C:\Program Files \windows_exporter目录。
- 默认监听端口是9182
1.2 部署
看windows_exporter章节介绍
1.配置mssql
C:\Program Files\windows_exporter\config.yml
默认是空,添加如下配置即可开启mssql监控,重启服务
collectors:
enabled: cs,dhcp,dns,cpu,logical_disk,memory,net,os,textfile,thermalzon,time,cpu_info,mem,tcp,udp,diskdrive,logon,physical_disk,system,service,process,mssql
log:
level: warn
collectors:
enabled: cs,dhcp,dns,cpu,logical_disk,memory,net,os,textfile,thermalzon,time,cpu_info,mem,tcp,udp,diskdrive,logon,physical_disk,system,service,process,mssql
log:
level: warn
2.开启SQL Server Agent in SSMS
- 配置开机自起
3.调试
手动启动并配置参数
"C:\Program Files\windows_exporter\windows_exporter.exe" --collectors.enabled="mssql" --log.format logger:eventlog?name=windows_exporter --log.file eventlog --config.file="C:\Program Files\windows_exporter\config.yaml"
"C:\Program Files\windows_exporter\windows_exporter.exe" --collectors.enabled="mssql" --log.format logger:eventlog?name=windows_exporter --log.file eventlog --config.file="C:\Program Files\windows_exporter\config.yaml"
- 效果
1.3 配置Prometheus采集
- job_name: Windows
static_configs:
- targets:
- 10.103.236.129:9182
scrape_interval: 1m
scrape_timeout: 30s
scheme: http
metrics_path: "/metrics"
honor_labels: true
- job_name: Windows
static_configs:
- targets:
- 10.103.236.129:9182
scrape_interval: 1m
scrape_timeout: 30s
scheme: http
metrics_path: "/metrics"
honor_labels: true
- 重启服务
curl -XPOST http://prometheus.ikubernetes.net/-/reload
curl -XPOST http://prometheus.ikubernetes.net/-/reload
1.告警规则
https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md
############## SqlServer_rules ###########
SqlServer.rules: |
groups:
- name: "SqlServer.rules"
rules:
- alert: SqlServer_Down
expr: windows_service_state{ name="MSSQLSERVER",state="running"} == 0
for: 0m
labels:
severity: critical
annotations:
summary: SQL Server down (instance {{ $labels.instance }})
description: "SQL server instance is down\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
############## SqlServer_rules ###########
SqlServer.rules: |
groups:
- name: "SqlServer.rules"
rules:
- alert: SqlServer_Down
expr: windows_service_state{ name="MSSQLSERVER",state="running"} == 0
for: 0m
labels:
severity: critical
annotations:
summary: SQL Server down (instance {{ $labels.instance }})
description: "SQL server instance is down\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
1.4 grafana
2. prometheus-mssql-exporter
1.1 介绍
1.2 部署
1.k8s
apiVersion: apps/v1
kind: Deployment
metadata:
name: sql-exporter
labels:
app: sql-exporter
spec:
replicas: 1
selector:
matchLabels:
app: sql-exporter
template:
metadata:
labels:
app: sql-exporter
spec:
containers:
- name: sql-exporter
image: awaragi/prometheus-mssql-exporter:latest
env:
- name: SERVER
value: "your-mssql-server"
- name: USERNAME
value: "your-username"
- name: PASSWORD
value: "your-password"
- name: DEBUG
value: "app"
- name: PORT
value: "1433"
ports:
- containerPort: 4000
---
apiVersion: v1
kind: Service
metadata:
name: sql-exporter
spec:
selector:
app: sql-exporter
ports:
- port: 4000
targetPort: 4000
apiVersion: apps/v1
kind: Deployment
metadata:
name: sql-exporter
labels:
app: sql-exporter
spec:
replicas: 1
selector:
matchLabels:
app: sql-exporter
template:
metadata:
labels:
app: sql-exporter
spec:
containers:
- name: sql-exporter
image: awaragi/prometheus-mssql-exporter:latest
env:
- name: SERVER
value: "your-mssql-server"
- name: USERNAME
value: "your-username"
- name: PASSWORD
value: "your-password"
- name: DEBUG
value: "app"
- name: PORT
value: "1433"
ports:
- containerPort: 4000
---
apiVersion: v1
kind: Service
metadata:
name: sql-exporter
spec:
selector:
app: sql-exporter
ports:
- port: 4000
targetPort: 4000
2.配置采集
- job_name: sql-exporter
static_configs:
- targets: [sql-exporter:4000]
- job_name: sql-exporter
static_configs:
- targets: [sql-exporter:4000]
3.grafana
3. mssql_exporter
1. 介绍
https://github.com/DanielOliver/mssql_exporter
这种方式所有sql语句自己收集
2. 部署
vi docker-compose.yml
version: '3'
services:
mssql_exporter:
image: "danieloliver/mssql_exporter:latest"
ports:
- "80:80"
depends_on:
- sqlserver.dev
environment:
- PROMETHEUS_MSSQL_DataSource=Server=tcp:sqlserver.dev,1433;Initial Catalog=master;Persist Security Info=False;User ID=sa;Password=yourStrong(!)Password;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=10;
- PROMETHEUS_MSSQL_ConfigFile=metrics.json
- PROMETHEUS_MSSQL_ServerPath=metrics
- PROMETHEUS_MSSQL_ServerPort=80
- PROMETHEUS_MSSQL_AddExporterMetrics=false
- PROMETHEUS_MSSQL_Serilog__MinimumLevel=Information
- |
PROMETHEUS_MSSQL_ConfigText=
{
"Queries": [
{
"Name": "mssql_process_status",
"Query": "SELECT status, COUNT(*) count FROM sys.sysprocesses GROUP BY status",
"Description": "Counts the number of processes per status",
"Usage": "GaugesWithLabels",
"Columns": [
{
"Name": "status",
"Label": "status",
"Usage": "GaugeLabel",
"Order": 0
},
{
"Name": "count",
"Label": "count",
"Usage": "Gauge"
}
]
},
{
"Name": "mssql_process_connections",
"Query": "SELECT ISNULL(DB_NAME(dbid), 'other') as dbname, COUNT(dbid) as connections FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid",
"Description": "Counts the number of connections per db",
"Usage": "GaugesWithLabels",
"Columns": [
{
"Name": "dbname",
"Label": "dbname",
"Usage": "GaugeLabel",
"Order": 0
},
{
"Name": "connections",
"Label": "count",
"Usage": "Gauge"
}
]
},
{
"Name": "mssql_deadlocks",
"Query": "SELECT cntr_value FROM sys.dm_os_performance_counters where counter_name = 'Number of Deadlocks/sec' AND instance_name = '_Total'",
"Description": "Number of lock requests per second that resulted in a deadlock since last restart",
"Columns": [
{
"Name": "cntr_value",
"Label": "mssql_deadlocks",
"Usage": "Gauge",
"DefaultValue": 0
}
]
}
],
"MillisecondTimeout": 4000
}
sqlserver.dev:
image: "mcr.microsoft.com/mssql/server:2017-latest"
ports:
- "1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=yourStrong(!)Password
version: '3'
services:
mssql_exporter:
image: "danieloliver/mssql_exporter:latest"
ports:
- "80:80"
depends_on:
- sqlserver.dev
environment:
- PROMETHEUS_MSSQL_DataSource=Server=tcp:sqlserver.dev,1433;Initial Catalog=master;Persist Security Info=False;User ID=sa;Password=yourStrong(!)Password;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=10;
- PROMETHEUS_MSSQL_ConfigFile=metrics.json
- PROMETHEUS_MSSQL_ServerPath=metrics
- PROMETHEUS_MSSQL_ServerPort=80
- PROMETHEUS_MSSQL_AddExporterMetrics=false
- PROMETHEUS_MSSQL_Serilog__MinimumLevel=Information
- |
PROMETHEUS_MSSQL_ConfigText=
{
"Queries": [
{
"Name": "mssql_process_status",
"Query": "SELECT status, COUNT(*) count FROM sys.sysprocesses GROUP BY status",
"Description": "Counts the number of processes per status",
"Usage": "GaugesWithLabels",
"Columns": [
{
"Name": "status",
"Label": "status",
"Usage": "GaugeLabel",
"Order": 0
},
{
"Name": "count",
"Label": "count",
"Usage": "Gauge"
}
]
},
{
"Name": "mssql_process_connections",
"Query": "SELECT ISNULL(DB_NAME(dbid), 'other') as dbname, COUNT(dbid) as connections FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid",
"Description": "Counts the number of connections per db",
"Usage": "GaugesWithLabels",
"Columns": [
{
"Name": "dbname",
"Label": "dbname",
"Usage": "GaugeLabel",
"Order": 0
},
{
"Name": "connections",
"Label": "count",
"Usage": "Gauge"
}
]
},
{
"Name": "mssql_deadlocks",
"Query": "SELECT cntr_value FROM sys.dm_os_performance_counters where counter_name = 'Number of Deadlocks/sec' AND instance_name = '_Total'",
"Description": "Number of lock requests per second that resulted in a deadlock since last restart",
"Columns": [
{
"Name": "cntr_value",
"Label": "mssql_deadlocks",
"Usage": "Gauge",
"DefaultValue": 0
}
]
}
],
"MillisecondTimeout": 4000
}
sqlserver.dev:
image: "mcr.microsoft.com/mssql/server:2017-latest"
ports:
- "1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=yourStrong(!)Password
$env:PROMETHEUS_MSSQL_DataSource="Server=tcp:hjgjhg324.database.windows.net,1433;Initial Catalog=jjkhjk34;Persist Security Info=False;User ID={ USER ID };Password={ PASWORD }; MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
3. 配置采集
- job_name: 'netcore-prometheus'
# metrics_path defaults to '/metrics'
static_configs:
- targets: ['localhost']
- job_name: 'netcore-prometheus'
# metrics_path defaults to '/metrics'
static_configs:
- targets: ['localhost']
4. grafana
自己画
自定义
4. sql_exporter-推荐这个
https://github.com/burningalchemist/sql_exporter(一直在更新)
更多、更高级的sql server采集指标:https://github.com/influxdata/telegraf/tree/master/plugins/inputs/sqlserver?tdsourcetag=s_pctim_aiomsg
sql server 对象监控 参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/performance-monitor/use-sql-server-objects?view=sql-server-ver15
4.1 介绍
可以自定义查询sql语句来生成指标
参考:
https://github.com/free/sql_exporter
https://grafana.com/grafana/dashboards/13919-microsoft-sql-server/