前一段時間自家養的幾隻貓常常出問題,因爲沒有有效的監控預警手段,以致於問題出現或者許久一段時間纔會被通知到。凌晨一點這個鍋可誰都不想背,爲此基於目前的狀況搭建瞭如下這麼一套監控預警系統。mysql
GTI監控預警系統,架構流程說明:git
這裏只對Grafana、Telegraf、Influxdb、Tomcat 作相應的安裝說明,Nginx 以及 Docker 請自行查閱資料。github
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
建立並運行容器
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/
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
因爲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後臺管理進行相關配置。
選擇 datasources/Add datasource
輸入正確的HTTP地址以及數據庫帳號密碼,點擊保存,若是出現綠色提示框,說明配置成功。
選擇 dashboard/import
這裏有三種方式導入面板:
這裏咱們導入事先本身定製保存的Tomcat監控面板,最後點擊導入保存。
若是不出意外,將會是下圖的樣子。
前期作了這麼多,咱們的最終目的是爲了提早預警通知,在系統即將發生災難以前做出相應的準備調整。這裏咱們以Tomcat的線程數量閾值做爲預警通知。
一、Alert名稱,能夠自定義。
二、執行的頻率,這裏我選擇每60s檢測一次。
三、判斷標準,默認是avg,這裏是下拉框,本身按需求選擇。
四、query(A,5m,now),字母A表明選擇的metrics中設置的sql,也能夠選擇其它在metrics中設置的,但這裏是單選。5m表明從如今起往以前的五分鐘,即5m以前的那個點爲時間的起始點,now爲時間的結束點,此外這裏能夠本身手動輸入時間。
五、設置的預警臨界點,這裏手動輸入,和6是一樣功能,6能夠手動移動,兩種操做是等同的。
這裏咱們選擇的是郵件預警通知,可是要提早進行配置,詳見一開始grafana.ini中 SMTP / Emailing 相關參數配置。
點擊發送測試,提示成功會發送一份告警Demo到指定郵箱:
講道理,這一套東西仍是挺強大的。特別是對於中小公司來講,各類成熟的開源組間一整合完美搭建出一套監控系統,時間成本、人力成本、技術成本能夠降到最低。
你們安裝過程當中,版本可能不盡相同,相關頁面展現會不一致,可是不會影響最終功能呈現。
https://docs.influxdata.com/influxdb/
https://docs.influxdata.com/telegraf/
https://blog.52itstyle.com/archives/2014/