1. 概述
数据库的exporter级别的监控基本都是通过创建可读账号,然后登录数据库去拿一些数据来完成监控的。我们常见的数据库在官方的网站上记录的export如下
我们就挑几个在企业中经常用到的来说一说
2. oracle_exporter
先来说说企业中用的最多的一种关系型数据库oracle,我们使用的是这个。
2.1. Docker
-
创建一个oracle实验环境
docker run -d --name oracle -p 1521:1521 wnameless/oracle-xe-11g-r2:18.04-apex
-
创建oracle_exporter
-
一般的镜像
docker run -d --name oracledb_exporter --link=oracle -p 9161:9161 -e DATA_SOURCE_NAME=system/oracle@oracle/xe iamseth/oracledb_exporter
-
alpine的镜像,exporter的版本大于0.2.1才支持
docker run -d --name oracledb_exporter --link=oracle -p 9161:9161 -e DATA_SOURCE_NAME=system/oracle@oracle/xe iamseth/oracledb_exporter:alpine
-
2.2. 二进制包
-
创建一个oracle实验环境
docker run -d --name oracle -p 1521:1521 wnameless/oracle-xe-11g-r2:18.04-apex
-
安装oracle客户端,如果使用docker镜像,镜像中会包含oracle的依赖库,我们使用二进制方式的话就需要手动配置
rpm -ivh https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-basiclite-19.8.0.0.0-1.x86_64.rpm
-
配置oracle环境变量,根据下载的版本不一样,文件夹可能会有小变动,但是基本都是在/usr/lib/oracle下,如果是二进制包的,就去找解压地址
ORACLE_HOME=/usr/lib/oracle/19.8/client64/ LD_LIBRARY_PATH=/usr/lib/oracle/19.8/client64/lib
-
下载二进制包并解压
-
配置各种参数
-
直接连接oracle listener的SID
export DATA_SOURCE_NAME=system/password@oracle-sid
-
或者直接使用URL
export DATA_SOURCE_NAME=user/password@//myhost:1521/service
-
-
启动exporter
export DATA_SOURCE_NAME=system/oracle@localhost:1521/xe; /path/to/binary/oracledb_exporter --log.level error --web.listen-address 0.0.0.0:9161
-
创建systemd的service文件
[Unit] Description=Service for oracle telemetry client After=network.target [Service] Type=oneshot #User=oracledb_exporter ExecStart=/path/of/the/oracledb_exporter --log.level error --web.listen-address 0.0.0.0:9161 [Install] WantedBy=multi-user.target
2.3. 自定义metrics
这里说的自定义metrics是说去数据库中,通过select语句查询之后,把返回的结果作为metrics暴露出来,主要用来监控标准模板中不提供的一些参数,比如:业务指标,或者标准模板中不提供的一些功能,比如:查询最耗时的SQL语句等等。
在exporter中有一个启动参数叫--custom.metrics string
,这个参数用来指定自定义文件的位置,文件需要是一个TOML格式的文件,比如c_metrics.toml
[[metric]]
context = "test"
request = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"
metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }
我们启动的时候就需要使用
export DATA_SOURCE_NAME=system/oracle@localhost:1521/xe; /path/to/binary/oracledb_exporter --log.level error --web.listen-address 0.0.0.0:9161 --custom.metrics /path/to/c_metrics.toml
启动之后,我们可以看到这样的结果
...
# HELP oracledb_test_value_1 Simple example returning always 1.
# TYPE oracledb_test_value_1 gauge
oracledb_test_value_1 1
# HELP oracledb_test_value_2 Same but returning always 2.
# TYPE oracledb_test_value_2 gauge
oracledb_test_value_2 2
...
这就是我们刚才自定义的数据了。其实我们如果使用二进制包,他的包里面是有一个例子的,叫default-metrics.toml
。我们默认的数据就是使用这个来获取数据的。
3. mysql_exporter
3.1. 启动测试的mysql
docker run --name mysql-server -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql docker.io/mysql
登录到容器当中
#看下容器的ID
~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7aa221d1c9bb docker.io/mysql "docker-entrypoint..." 7 minutes ago Up 7 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-server
# 登录过去
docker exec -it 7aa221d1c9bb sh
配置一下访问权限
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT SELECT ON *.* TO 'readonly'@'%';
Query OK, 0 rows affected (0.06 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | readonly |
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
6 rows in set (0.00 sec)
3.2. 使用docker的方式运行
-
下载镜像
docker pull prom/mysqld-exporter
-
看一下mysql的网络IP,默认是连接到了bridge上
# docker network ls NETWORK ID NAME DRIVER SCOPE 9386ac1896df bridge bridge local a16288c35865 host host local 2a88d9207c1a none null local # docker inspect 9386ac1896df|grep default "Driver": "default", "com.docker.network.bridge.default_bridge": "true",
-
启动exporter
docker run -d \ -p 9104:9104 \ --network 9386ac1896df \ -e DATA_SOURCE_NAME="readonly:readonly@(127.0.0.1:3306)/" \ prom/mysqld-exporter
-
看指标
curl localhost:9104/metrics
3.3. 二进制包
-
下载地址:点这里
-
启动exporter
export DATA_SOURCE_NAME='user:password@(hostname:3306)/' ./mysqld_exporter <flags>
4. mssql_exporter
4.1. 搭建测试sqlserver
由于微软目前也支持linux的sqlserver了,所以我们可以使用docker的方式快速启动一个sqlserver,官方网站是这个
-
拉取镜像
docker pull mcr.microsoft.com/mssql/server:2017-latest
-
启动镜像
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
-
使用命令测试下链接
``` bash docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Passw0rd
1> select @@VERSION 2> go
Microsoft SQL Server 2017 (RTM-CU22) (KB4577467) - 14.0.3356.20 (X64) Aug 20 2020 22:33:27 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 16.04.7 LTS)
(1 rows affected) 1>
### 4.2. 使用docker方式运行
+ 拉取镜像
``` bash
docker pull awaragi/prometheus-mssql-exporter
-
启动程序
docker run -e SERVER=172.17.0.3 -e USERNAME=sa -e PASSWORD=Passw0rd -e DEBUG=app -p 4000:4000 --name prometheus-mssql-exporter awaragi/prometheus-mssql-exporter
-
拿取数据
curl localhost:4000/metrics
4.3. 二进制包
-
下载地址:点这里
-
安装依赖
yum install -y nodejs
-
启动程序
SERVER=sqlserver PORT=sqlport<1443> USERNAME=sqluser PASSWORD=sqluserpassword EXPOSE=webport<4000> node ./index.js
5. pgsql_exporter
5.1. 搭建测试pgsql
-
下载镜像
docker pull postgre
-
启动服务
docker run --net=host -it -d -e POSTGRES_PASSWORD=Passw0rd postgres
-
测试链接
5.2. 使用docker方式安装
-
下载镜像
docker pull wrouesnel/postgres_exporter
-
启动客户端
docker run --net=host -e DATA_SOURCE_NAME="postgresql://postgres:password@localhost:5432/postgres?sslmode=disable" -p 9187:9187 wrouesnel/postgres_exporter