Grafana+Telegraf+Influxdb監控Tomcat集羣方案

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

前言

前一段時間自家養的幾隻貓常常出問題,因爲沒有有效的監控預警手段,以致於問題出現或者許久一段時間纔會被通知到。凌晨一點這個鍋可誰都不想背,爲此基於目前的狀況搭建瞭如下這麼一套監控預警系統。mysql

相關軟件

  • Nginx:代理訪問 Grafana
  • Grafana: 可視化面板(Dashboard),有着很是漂亮的圖表和佈局展現
  • Influxdb:開源的時間序列數據庫,適用於記錄度量,事件及執行分析
  • Telegraf:收集系統和服務的統計數據
  • Docker:開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中

監控架構

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

GTI監控預警系統,架構流程說明:git

  • 第一步:數據採集,Telegraf 採集 Tomcat 相關參數數據
  • 第二步:數據存儲,Influxdb 存儲 Telegraf 採集的數據
  • 第三步:數據可視化,Grafana 配置 Tomcat 監控面板
  • 第四步:預警通知,配置釘釘、郵件等預警

安裝配置

這裏只對Grafana、Telegraf、Influxdb、Tomcat 作相應的安裝說明,Nginx 以及 Docker 請自行查閱資料。github

Grafana

Grafana只是一個接入數據源的可視化面板,這裏爲了方便,咱們選擇Docker安裝。web

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

執行成功之後,執行如下命令:redis

docker ps

若是出現grafana運行容器說明安裝成功。sql

查看容器相關參數:docker

docker inspect docker.io/grafana/grafana

進入:數據庫

docker exec -it grafana /bin/sh

Grafana的默認配置文件grafana.ini位於容器中的/etc/grafana,這個文件是映射不出來的。不過能夠先建立並運行一個容器,拷貝出來從新建立運行容器。tomcat

參數說明(這裏截取了部分重點參數):服務器

##################### 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/

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

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

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

若是出現以上界面,說明配置成功。

監控配置

依次啓動Tomcat、Influxdb、Telegraf、Grafana完成後,咱們進入Grafana後臺管理進行相關配置。

配置Influxdb數據源:

選擇 datasources/Add datasource

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

輸入正確的HTTP地址以及數據庫帳號密碼,點擊保存,若是出現綠色提示框,說明配置成功。

配置Tomcat儀表盤:

選擇 dashboard/import

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

這裏有三種方式導入面板:

  • 選擇輸入官方面板ID或者URL
  • 直接複製黏貼JSON格式代碼
  • 導入第三方面板JSON格式文件

這裏咱們導入事先本身定製保存的Tomcat監控面板,最後點擊導入保存。

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

若是不出意外,將會是下圖的樣子。

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

告警配置

前期作了這麼多,咱們的最終目的是爲了提早預警通知,在系統即將發生災難以前做出相應的準備調整。這裏咱們以Tomcat的線程數量閾值做爲預警通知。

點擊線程面板-選擇編輯:

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

配置相關參數:

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

一、Alert名稱,能夠自定義。
二、執行的頻率,這裏我選擇每60s檢測一次。
三、判斷標準,默認是avg,這裏是下拉框,本身按需求選擇。
四、query(A,5m,now),字母A表明選擇的metrics中設置的sql,也能夠選擇其它在metrics中設置的,但這裏是單選。5m表明從如今起往以前的五分鐘,即5m以前的那個點爲時間的起始點,now爲時間的結束點,此外這裏能夠本身手動輸入時間。
五、設置的預警臨界點,這裏手動輸入,和6是一樣功能,6能夠手動移動,兩種操做是等同的。

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

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

這裏咱們選擇的是郵件預警通知,可是要提早進行配置,詳見一開始grafana.ini中 SMTP / Emailing 相關參數配置。

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

點擊發送測試,提示成功會發送一份告警Demo到指定郵箱:

Grafana+Telegraf+Influxdb監控Tomcat集羣方案

總結

講道理,這一套東西仍是挺強大的。特別是對於中小公司來講,各類成熟的開源組間一整合完美搭建出一套監控系統,時間成本、人力成本、技術成本能夠降到最低。

參考文檔

你們安裝過程當中,版本可能不盡相同,相關頁面展現會不一致,可是不會影響最終功能呈現。

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

相關文章
相關標籤/搜索