前言

前一段时间自家养的几只猫经常出问题,由于没有有效的监控预警手段,以至于问题出现或者许久一段时间才会被通知到。凌晨一点这个锅可谁都不想背,为此基于目前的情况搭建了以下这么一套监控预警系统。

相关软件

  • Nginx:代理访问 Grafana
  • Grafana: 可视化面板(Dashboard),有着非常漂亮的图表和布局展示
  • Influxdb:开源的时间序列数据库,适用于记录度量,事件及执行分析
  • Telegraf:收集系统和服务的统计数据
  • Docker:开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中

监控架构


GTI监控预警系统,架构流程说明:

  • 第一步:数据采集,Telegraf 采集 Tomcat 相关参数数据
  • 第二步:数据存储,Influxdb 存储 Telegraf 采集的数据
  • 第三步:数据可视化,Grafana 配置 Tomcat 监控面板
  • 第四步:预警通知,配置钉钉、邮件等预警

安装配置

这里只对Grafana、Telegraf、Influxdb、Tomcat 做相应的安装说明,Nginx 以及 Docker 请自行查阅资料。

Grafana

Grafana只是一个接入数据源的可视化面板,这里为了方便,我们选择Docker安装。

mkdir grafana
ID=$(id -u)
docker run -d --user $ID --name=grafana  --volume "$PWD/grafana:/var/lib/grafana" -p 3000:3000 grafana/grafana
# 如果生产环境配置,最好提前配置好域名
docker run -d --user $ID --name=grafana --volume "$PWD/data:/var/lib/grafana" -p 3000:3000 -e "GF_SERVER_ROOT_URL=http://monitor.52itstyle.com" grafana/grafana

执行成功以后,执行以下命令:

docker ps

如果出现grafana运行容器说明安装成功。

查看容器相关参数:

docker inspect docker.io/grafana/grafana

进入:

docker exec -it grafana /bin/sh

Grafana的默认配置文件grafana.ini位于容器中的/etc/grafana,这个文件是映射不出来的。不过可以先创建并运行一个容器,拷贝出来重新创建运行容器。

参数说明(这里截取了部分重点参数):

##################### Grafana 几个重要的参数(参考一下) #####################
[paths]
# 存放临时文件、session以及sqlite3数据库的目录
;data = /var/lib/grafana

# 存放日志的地方
;logs = /var/log/grafana

# 存放相关插件的地方
;plugins = /var/lib/grafana/plugins

#################################### Server ####################################
[server]
# 默认协议 支持(http, https, socket)
;protocol = http

# 默认端口
;http_port = 3000

# 这里配置访问地址,如果使用了反向代理请配置域名,发送告警通知的时候作为访问地址
root_url = http://grafana.52itstyle.com

#################################### Database ####################################
[database]

# 默认使用的数据库sqlite3,位于/var/lib/grafana目录下面
;path = grafana.db

#################################### Session ####################################
[session]
# session 存储方式,默认是file即可  Either "memory", "file", "redis", "mysql", "postgres", default is "file"
;provider = file

#################################### SMTP / Emailing ##########################
[smtp]
# 邮件服务器配置,自行修改配置
enabled = true
host = smtp.mxhichina.com:465
user = admin@52itstyle.com
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
password = 123456
;cert_file =
;key_file =
;skip_verify = false
from_address = admin@52itstyle.com
# 这里不要设置中文,否则会发送失败
from_name = Grafana

Influxdb

创建并运行容器

docker run -d -p 8083:8083 -p 8086:8086 -e ADMIN_USER="root" -e INFLUXDB_INIT_PWD="root" -e PRE_CREATE_DB="telegraf" --name influxdb tutum/influxdb:latest

各个参数含义:

-d:容器在后台运行

--name:容器名称

-e:指定环境变量,容器中可以使用该环境变量 

-p:将容器内端口映射到宿主机端口,格式为 宿主机端口:容器内端口;8083是influxdb的web管理工具端口,8086是influxdb的HTTP API端口

执行成功以后,执行以下命令:

docker ps

如果出现influxdb运行容器说明安装成功。

访问地址:http://ip:8083/


Telegraf

docker pull telegraf

把telegraf相关配置拷贝到宿机

docker cp telegraf:/etc/telegraf/telegraf.conf ./telegraf

采集Tomcat数据:

如果想监控多个Tomcat,这里配置多个[[inputs.tomcat]]即可,但是一定要配置不同的tags标识。

[[inputs.tomcat]]
url = "http://192.168.1.190:8080/manager/status/all?XML=true"
# Tomcat访问账号密码 必须配置
username = "tomcat"
password = "tomcat"
timeout = "5s"
# 标识Tomcat名称、根据实际项目部署情况而定
[inputs.tomcat.tags]
host = "blog"

[[inputs.tomcat]]
url = "http://192.168.1.190:8081/manager/status/all?XML=true"
# Tomcat访问账号密码 必须配置
username = "tomcat"
password = "tomcat"
timeout = "5s"
# 标识Tomcat名称、根据实际项目部署情况而定
[inputs.tomcat.tags]
host = "bbs"

采集数据到influxdb:

[[outputs.influxdb]]
      # urls = ["udp://localhost:8089"] # UDP endpoint example
      urls = ["http://localhost:8086"] # required,这个url改成自己host
      ## The target database for metrics (telegraf will create it if not exists).
      database = "telegraf" # 这个会在influx库创建一个库

把配置文件复制到容器:

docker cp telegraf.conf telegraf:/etc/telegraf/telegraf.conf

重启telegraf服务:

docker restart docker

Tomcat

由于telegraf收集Tomcat相关数据需要配置访问权限,这里我们选择Tomcat7做配置说明。

修改位于conf下的tomcat-users.xml文件:

<tomcat-users>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>

重启Tomcat容器,访问以下地址:

http://ip:8080/manager/status/all?XML=true

如果出现以上界面,说明配置成功。

监控配置

依次启动Tomcat、Influxdb、Telegraf、Grafana完成后,我们进入Grafana后台管理进行相关配置。

配置Influxdb数据源:

选择 datasources/Add datasource


输入正确的HTTP地址以及数据库账号密码,点击保存,如果出现绿色提示框,说明配置成功。

配置Tomcat仪表盘:

选择 dashboard/import


这里有三种方式导入面板:

  • 选择输入官方面板ID或者URL
  • 直接复制黏贴JSON格式代码
  • 导入第三方面板JSON格式文件

这里我们导入事先自己定制保存的Tomcat监控面板,最后点击导入保存。


如果不出意外,将会是下图的样子。


告警配置

前期做了这么多,我们的最终目的是为了提前预警通知,在系统即将发生灾难之前作出相应的准备调整。这里我们以Tomcat的线程数量阈值作为预警通知。

点击线程面板-选择编辑:


配置相关参数:


1、Alert名称,可以自定义。
2、执行的频率,这里我选择每60s检测一次。
3、判断标准,默认是avg,这里是下拉框,自己按需求选择。
4、query(A,5m,now),字母A代表选择的metrics中设置的sql,也可以选择其它在metrics中设置的,但这里是单选。5m代表从现在起往之前的五分钟,即5m之前的那个点为时间的起始点,now为时间的结束点,此外这里可以自己手动输入时间。
5、设置的预警临界点,这里手动输入,和6是同样功能,6可以手动移动,两种操作是等同的。

配置预警信息以及通知方式:



这里我们选择的是邮件预警通知,但是要提前进行配置,详见一开始grafana.ini中 SMTP / Emailing 相关参数配置。

点击发送测试,提示成功会发送一份告警Demo到指定邮箱:


总结

讲道理,这一套东西还是挺强大的。特别是对于中小公司来说,各种成熟的开源组间一整合完美搭建出一套监控系统,时间成本、人力成本、技术成本可以降到最低。

参考文档

大家安装过程中,版本可能不尽相同,相关页面展示会不一致,但是不会影响最终功能呈现。

http://docs.grafana.org/

https://docs.influxdata.com/influxdb/

https://docs.influxdata.com/telegraf/

https://blog.52itstyle.com/archives/2014/

https://blog.52itstyle.com/archives/2029/

https://github.com/influxdata/telegraf/pull/3277

Grafana+Telegraf+Influxdb监控Tomcat集群方案的更多相关文章

  1. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  2. 【原创】Apache和基于虚拟主机的Tomcat集群方案

    最近建设了北京某政府机构的网站,网站前段使用Apache做负载均衡,后端使用Tomcat做的集群,基于虚拟主机的方式访问,并且实现了静态资源和动态资源的分离. 开始的建设方案有两种,一种是使用apac ...

  3. Apache + Tomcat集群 + 负载均衡

    Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html  http://blog ...

  4. 部署grafana+telegraf+influxdb 及 配置 jmeter后端监听

    搞性能测试,可以搭建Grafana+Telegraf+InfluxDB 监控平台,监控服务器资源使用率.jmeter性能测试结果等. telegraf: 是一个用 Go 编写的代理程序,可收集系统和服 ...

  5. 从SpringBoot构建十万博文聊聊Tomcat集群监控

    前言 在十万博文终极架构中,我们使用了Tomcat集群,但这并不能保证系统不会出问题,为了保证系统的稳定运行,我们还需要对 Tomcat 进行有效的运维监控手段,不至于问题出现或者许久一段时间才知道. ...

  6. Tomcat集群环境下session共享方案 通过memcached 方法实现

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  7. 搭建grafana+telegraf+influxdb服务器性能监控平台

    最近在学习性能测试,了解到一套系统资源使用率低的监控环境,也就是grafana+telegraf+influxdb. InfluxDB是一款优秀的时间序列数据库,适合存储设备性能.日志.物联网传感器等 ...

  8. Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx

    第一步,安装Tomcat 系统环境:Centos7 第1步:下载tomcat安装包 tomcat官网:https://tomcat.apache.org/ 第2步:安装包上传至linux中 第3步:下 ...

  9. FineReport关于tomcat集群部署的方案

    多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...

随机推荐

  1. 基于Python3的漏洞检测工具 ( Python3 插件式框架 )

    目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...

  2. JS学习之路之JavaScript match() 方法

    match() 方法,在字符串内找到相应的值并返回这些值,()内匹配字符串或者正则表达式. 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置. d ...

  3. 简单易懂的程序语言入门小册子(1.5):基于文本替换的解释器,递归定义与lambda演算的一些额外说明

    这一篇接在第一篇lambda演算的后面.讲讲一些数学知识. 经常有些看似很容易理解的东西,一旦要描述得准确无误,就会变得极为麻烦. 软件工程里也有类似情况:20%的代码实现了核心功能,剩下80%的代码 ...

  4. 在ubuntu18.04上安装EOS

    在ubuntu18.04上安装EOS 在ubuntu18.04上安装EOS的目的: 把交易所的eos转到eos主网,防止交易所跑路或者交易所被黑客攻击 在不联网的安全环境下,用eos官方的命令行工具, ...

  5. Windows Server 2016-WinSer 2016标准版与数据中心版的区别

    今天在整理文章的时候看到有读者问到他现在的测试环境是用的Windows Server 2016标准版,和我现阶段系列文章的环境是否有区别. 其实针对Windows Server 2016 Active ...

  6. 【爬坑】远程连接 MySQL 失败

    问题描述 远程连接 MySQL 服务器失败 报以下错误 host 192.168.23.1 is not allowed to connect to mysql server 解决方案 在服务器端打开 ...

  7. 新安装 Ubuntu 系统设置root用户密码!谨此纪念自己踩过的坑!

    Ubuntu 在安装过程中创建的用户为普通用户,而root 用户密码该如何设置呢? 执行以下命令即可: sudo passwd root 提示你输入普通用户密码,然后设置root用户的密码!这样,就更 ...

  8. Linux 小知识翻译 - 「RFC」

    这次聊聊「RFC」. 有很多人经常听说「RFC」的吧,上次介绍的NTP是由「RFC1305规定的」,HTTP是由「RFC2616规定的」. RFC是「Request For Comments」的简称, ...

  9. 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第五篇,我尽量每周四篇         通过上一章的介绍,读者应该知道CPU内部有一些主要的电路,比方:译码电路.运算电路.控 ...

  10. centos7下安装docker(16.docker跨主机存储)

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...