使用statsd-exporter配置的一些坑
監控上使用的graphite有些不穩定,有過幾次時間伺服器上記憶體爆掉,導致監控伺服器蹦掉。而graphite的升級部署真的是很多坑,每次每個版本都不一樣。如果能升級的話,那是最好的。
有心替換掉graphite,備選方式是選擇Prometheus,最大的問題是以前已經設定好的metric不想丟掉,再重新設計一套,幸好prometheus提供statsd轉換器,配置起來碰到幾個坑,記錄一下
第一步:配置statsd
這一步需要statsd往statsd_exporter傳遞一份資料過去(複製過去,不能影響原來的統計路徑)。查閱資料發現repeater具有這個特性,配置成功後的樣子如下配置檔案(config.js)
{ "graphiteHost": "127.0.0.1", "graphitePort": 2003, "port": 8125, "flushInterval": 10000, "dumpMessages": true , "debug": true , "backends": [ "./backends/graphite","./backends/repeater" ],// 注意這裡,都配置上 "repeaterProtocol":"tcp”, // 可以使用udp和tcp協議,預設是upd4協議 "repeater":[ { host: '10.1.1.204', port: 9125 }] // stats_exporter地址,注意使用IP }
這裡碰到坑為backends中一定要配置上./backends/repeater,否則的話repeater不生效,第二個坑是,由於使用的docker,{ host: '10.1.1.204', port: 9125 }這一部分中的host必須使用IP地址,不能使用127或者localhost的方式
第二步:配置statsd-exporter
配置statsd-exporter核心的工作是配置statsd-mapping.yml配置檔案,主要完成把graphite格式的metric對映為符合prometheums格式的metric,具體對映方式和自己的業務相關,做的了demo如下
mappings: - match: stats_counts.order.* name: "stats_counts_order_total" labels: action: "$1" - match: stats_counts.foods.* name: "foods_total" labels: style: "$1" - match: foods.* name: "foods_$1" labels: style: "$1"
詳細配置說明可以參考
https://github.com/prometheus/statsd_exporter
https://werner-dijkerman.nl/2017/05/27/monitoring-consul-with-statsd-exporter-and-prometheus/
配置好檔案後,可以通過docker命令啟動statsd_exporter
dockerrun --name statsd_exporter -d -p 9102:9102 -p 9125:9125 -p 9125:9125/udp \ -v $PWD/statsd_mapping.yml:/tmp/statsd_mapping.yml \ prom/statsd-exporter --statsd.mapping-config=/tmp/statsd_mapping.yml
其中,9102埠是供Prometheus pull使用,9125是供statsd repeater的。如果上面的statsd我們配置成功,statsd-exporter啟動成功後,我們可以通過http訪問9102檢視轉換的metric資訊
http://10.1.1.204:9102/metrics

第三步:配置Prometheus,讓其從statsd-exporter中拉取資料
建立prometheus.yml目錄,從scrape_configs部分,配置statad-exporter的拉取源
# A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: statsd// 從這裡開始 static_configs: - targets: ['10.1.1.24:9102’] // 注意這裡一定要寫IP地址,不能使用127或者localhost labels: instance: stats_count
核心點是job-name和targets,如果在docker內,切記不要使用127或者localhost,使用docker啟動
docker run --name prometheus -d -p 9090:9090 -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml -v$PWD/prometheus-data:/prometheus-dataprom/prometheus
如果能夠正常啟動,這時候通過訪問IP:port的形式,看到相關資料了,把下面的IP替換成你的IP
看到指標資料,如果沒有查詢到相關metric資料,可以訪問
檢視配置的源是否有效,正常狀態應該如下

其實經過以上配置,沒有使用Prometheums的。我們通過docker方式,獲取最新的graphite。把statsd中的資料repeater給新graphite一份,在配置一套grafana,這種方式完成新老granphite系統的升級,畢竟現在的監控資料可以丟失一些的。
參考資料:
https://github.com/prometheus/prometheus
https://github.com/prometheus/statsd_exporter