业务发展到如今,系统应用各种技术。Redis,MySQL,kafka,MongoDB,zookeeper 等技术的加入,系统的稳定性,健康程度是怎么样的目前是没有一个全盘的感知的。只是阿里云独立单独的自带监控,不能满足总体的监控和压测监控的需求。
压测环境的搭建,压测过程中重要的一环就是各个环节的监控。搭建监控系统满足监控压测服务器集群,方便后续的压测监控。为后续的性能调优提供对应的数据支撑。除此之外对于系统的全盘监控,为后续做对应的一些警报也是起到相应的支持。
备注:如果项目是 k8s 的集群可以用 docker 搭建,其他可以用源码进行搭建。当前为了快速先用 docker 搭建。但是有的 exporter 是用的源码不影响。
启动 docker
#root权限
systemctl start docker.service
依赖镜像
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
docker pull influxdb:1.8.1
配置
mkdir ~/opt/prometheus
cd /opt/prometheus/
vim prometheus.yml
yml 配置内容
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['192.168.30.79:9090']
labels:
instance: prometheus
- job_name: linux1
static_configs:
- targets: ['192.168.30.79:9100']
labels:
instance: node1
- job_name: linux2
static_configs:
- targets: ['192.168.30.79:9110']
labels:
instance: node2
- job_name: mysql
static_configs:
- targets: ['192.168.30.79:9104']
labels:
instance: db1
- job_name: redis
static_configs:
- targets: ['192.168.30.79:9121']
labels:
instance: redis
- job_name: rabbitmq
static_configs:
- targets: ['192.168.30.79:9099']
labels:
instance: rabbitmq
docker 启动 Prometheus
docker run -d \
-p 9090:9090 \
-v /home/opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle #热更新配置。不需要重启容器。
部署 node-exporter
docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter
部署 grafana
docker run -d -p 3000:3000 grafana/grafana
默认账号密码 admin/admin 新修改密码:123456
部署 influxdb
docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb influxdb:1.8.1
登录influxdb,并创建数据库
docker exec -it influxdb /bin/bash
influx
create database jmeter;
打开 jmeter,添加后端监听器 ,配置 influxdb 数据库,将压测的数据写入数据库中
measurement 填写前面创建的数据库:jmeter
grafna 导入 dashboards 模版 5496
prometheus 链接:http://192.168.30.79:9090/targets
grafana 链接:http://192.168.30.79:3000/ 默认账号密码 admin/admin 新修改密码:123456
接入后需要修改 prometheus.yml 文件。并且 docker 部署的需要重启容器(后续需要做追加方式不需要每次修改 yml 文件都需要重启容器)。
#官网下载对应的压缩包
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
#解压包到指定位置
tar zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
#移动到指定的文件夹
mv mysqld_exporter-0.12.1.linux-amd64 ./opt/mysqld_exporter
# 启动mysqld_exporter
nohup ./mysqld_exporter --config.my-cnf=./.my.cnf &
# 确认是否正常启动(默认端口9104)
netstat -lnptu | grep 9104
在 mysqld_exporter 目录下创建 .my.cnf 文件。
#.my.cnf文件配置内容
[client]
host=192.168.30.79
port=3306
user=dev
password=XXXX
接入后需要修改 prometheus.yml 文件。并且 docker 部署的需要重启容器(后续需要做追加方式不需要每次修改 yml 文件都需要重启容器)。
#官网下载对应的压缩包
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
#解压包到当前目录
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz
#移动到指定的文件夹
mv node_exporter-1.1.2.linux-amd64 ./opt/node_exporter
#使用nohup后台运行,并指定端口
nohup ./node_exporter --web.listen-address=":9110" &
#确认是否正常启动(默认端口9100,修改为了9110)
netstat -lnptu | grep 9110
接入后需要修改 prometheus.yml 文件。
#下载对应的压缩包(没有官网的包在Git上找了最多star的包)
wget https://github.com/oliver006/redis_exporter/releases/download/v1.23.1/redis_exporter-v1.23.1.linux-amd64.tar.gz
#解压包到当前目录
tar -zxvf redis_exporter-v1.23.1.linux-amd64.tar.gz
#移动到指定的文件夹
mv redis_exporter-v1.23.1.linux-amd64 ./opt/redis_exporter
#使用nohup后台运行,并指定端口
nohup ./redis_exporter --redis.addr=8.136.194.137:6379 --web.listen-address=":9121" &
#确认是否正常启动
netstat -lnptu | grep 9121
接入后需要修改 prometheus.yml 文件。
#下载对应的压缩包(没有官网的包在Git上找了最多star的包)
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC8/rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz
#解压包到当前目录
tar -zxvf rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz
#移动到指定的文件夹
mv rabbitmq_exporter-1.0.0-RC8.linux-amd64 ./opt/rabbitmq_exporter
#使用nohup后台运行,并指定端口
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://8.136.194.137:15672 nohup ./rabbitmq_exporter >/dev/null 2>&1 &
#确认是否正常启动
netstat -lnptu | grep 9099
需要用到的端口有 8088 11800 12800 9200 9300
安装 docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0\
/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改权限:chmod +x /usr/local/bin/docker-compose
验证是否安装成功
docker-compose --version
安装 skywalking-ui、skywalking-oap 和 elasticsearch
docker-compose.yml
mkdir /home/opt/skywalking
上传docker-compose.yml到 /home/opt/skywalking
cd /home/opt/skywalking
docker-compose up -d
初始化 elasticsearch
修改虚拟内存区域大小,否则会因为过小而无法启动:
sysctl -w vm.max_map_count=262144
修改/mydata/elasticsearch/data目录的权限,重新启动
chmod 777 -R /mydata/elasticsearch/data/
docker restart elasticsearch
安装中文分词器IKAnalyzer,并重新启动:
docker exec -it elasticsearch /bin/bash
#此命令需要在容器中运行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
docker restart elasticsearch
访问地址:http://192.168.30.79:8088/
安装 skywalking-agent.jar:
下载地址:http://skywalking.apache.org/downloads/
wget https://archive.apache.org/dist/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz
tar -zxvf apache-skywalking-apm-8.3.0.tar.gz
根据应用的运行环境,选择相应的方法来指定SkyWalking Agent的路径:
Linux Tomcat 7 / Tomcat 8:
在tomcat/bin/catalina.sh第一行添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS
JAR File 或 Spring Boot:
java -javaagent:/opt/apache-skywalking-apm-bin/agent\
/skywalking-agent.jar -Dskywalking.agent.service_name=\
bryanttest -Dskywalking.collector.backend_service=127.0.0.1:11800 \
-jar /usr/local/SpringBootDemo-master/target/spring-boot-demo-0.0.1-SNAPSHOT.jar
说明:
-javaagent 指定agent包位置。这里我将包解压到/opt目录了,因此路径为:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar
-Dskywalking.agent.service_name 指定服务名
-Dskywalking.collector.backend_service 指定skywalking oap地址,由于在本机,地址为:127.0.0.1:11800
备注:skywalking 部分是 bryant 进行编写和补充完善的。感谢 bryant。