graphite在centos7上的部署搭建

  • 2019 年 10 月 4 日
  • 筆記

Graphite安裝筆記

實驗環境: CentOS7.5 x64

部署python的程式推薦使用virtualenv這列的虛擬環境來進行,防止污染系統自帶的python包。

安裝一些必要的rpm包

yum install cairo  — 另外的2個包 cairo-devel pycairo 可以不用安裝

安裝virtualenv

yum install python-pip

pip install virtualenv

激活虛擬環境

virtualenv /opt/graphite

source /opt/graphite/bin/activate

安裝graphite全套組件

export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/"

pip install –no-binary=:all: https://github.com/graphite-project/whisper/tarball/master

pip install –no-binary=:all: https://github.com/graphite-project/carbon/tarball/master

pip install –no-binary=:all: https://github.com/graphite-project/graphite-web/tarball/master

如果這步提示某個依賴包版本不對,我們可以先人工執行下pip安裝依賴包。下面提供了一個正常運行的graphite上看到的pip包清單:

attrs==19.1.0  Automat==0.7.0  cachetools==3.1.1  cairocffi==0.9.0  cffi==1.12.3  constantly==15.1.0  Django==1.11.24  django-tagging==0.4.3  gunicorn==19.9.0  hyperlink==19.0.0  idna==2.8  incremental==17.5.0  pycparser==2.19  PyHamcrest==1.9.0  pyparsing==2.4.2  pytz==2019.2  scandir==1.10.0  six==1.12.0  Twisted==19.7.0  txAMQP==0.8.2  urllib3==1.25.3  whisper==1.2.0  zope.interface==4.6.0

初始化

cd /opt/graphite/webapp/graphite  cp local_settings.py.example local_settings.py  vim local_settings.py 修改如下3行程式碼:  CONF_DIR = '/opt/graphite/conf'  STORAGE_DIR = '/opt/graphite/storage'  STATIC_ROOT = '/opt/graphite/webapp/content'  LOG_DIR = '/opt/graphite/storage/log/webapp'

初始化下數據,不然後面啟動graphite後會提示no such user 這類報錯

cd  /opt/graphite/webapp

PYTHONPATH=/opt/graphite/webapp django-admin.py migrate –settings=graphite.settings –run-syncdb   ## 如果上面第一步時候沒有yum install cairo的話,這步會報錯

拷貝graphite的配置文件

cd /opt/graphite/conf/

cp carbon.conf.example carbon.conf

cp storage-schemas.conf.example storage-schemas.conf   一般會改動這個文件裡面的配置,達到自定義key存儲周期

cp relay-rules.conf.example relay-rules.conf

cp dashboard.conf.example dashboard.conf

cp graphTemplates.conf.example graphTemplates.conf

cp blacklist.conf.example  blacklist.conf

cp aggregation-rules.conf.example aggregation-rules.conf

cp storage-aggregation.conf.example storage-aggregation.conf

啟動graphite套件

/opt/graphite/bin/carbon-relay.py start  /opt/graphite/bin/carbon-cache.py start  ss -lntp | egrep carbon  LISTEN     0      50           *:7002                     *:*                   users:(("carbon-cache.py",pid=48433,fd=11))  LISTEN     0      50           *:2013                     *:*                   users:(("carbon-relay.py",pid=37683,fd=13))  LISTEN     0      50           *:2014                     *:*                   users:(("carbon-relay.py",pid=37683,fd=15))  LISTEN     0      50           *:2003                     *:*                   users:(("carbon-cache.py",pid=48433,fd=13))  LISTEN     0      50           *:2004                     *:*                   users:(("carbon-cache.py",pid=48433,fd=14))  /opt/graphite/bin/run-graphite-devel-server.py --port=8085 --libs=/opt/graphite/webapp /opt/graphite  前台啟動

啟動打點測試進程

python /opt/graphite/examples/example-client.py

安裝nginx

yum install nginx  cd /etc/nginx/conf.d  cat graphite.conf  內容如下:  upstream graphite {      server 127.0.0.1:8085 fail_timeout=0;  }  server {      listen 80 default_server;      server_name _;      root /opt/graphite/webapp;      access_log /var/log/nginx/graphite.access.log;      error_log  /var/log/nginx/graphite.error.log;      location = /favicon.ico {          return 204;      }      # serve static content from the "content" directory      location /static {          alias /opt/graphite/webapp/content;          expires max;      }      location / {          try_files $uri @graphite;      }      location @graphite {          proxy_pass_header Server;          proxy_set_header Host $http_host;          proxy_redirect off;          proxy_set_header X-Real-IP $remote_addr;          proxy_set_header X-Scheme $scheme;          proxy_connect_timeout 10;          proxy_read_timeout 10;          proxy_pass http://graphite;      }  }

創建nginx相關文件

touch /var/log/nginx/graphite.access.log

touch /var/log/nginx/graphite.error.log

chmod 640 /var/log/nginx/graphite.*

chown nginx.nginx /var/log/nginx/graphite.*

啟動nginx

nginx -t

systemctl start nginx

訪問 192.168.2.4/ 如下圖

可以看到已經有數據採集到了。

我們可以到grafana裡面配下graphite的數據源,然後展示數據,類似如下:

啟動brubeck(前台)  【一款類似statsd的工具,只是不需要nodejs環境】

yum install jansson jansson-devel

yum install libmicrohttpd libmicrohttpd-devel

git clone https://github.com/github/brubeck.git

cd brubeck/

./script/bootstrap

mkdir /usr/local/brubeck/

cp brubeck /usr/local/brubeck/

vim /usr/local/brubeck/brubeck.json  增加配置文件如下:

{    "sharding" : false,    "server_name" : "prod-devops-graphite-01",    "dumpfile" : "/var/lib/brubeck.dump",    "capacity" : 15,    "expire" : 20,    "http" : ":8000",    "backends" : [      {        "type" : "carbon",        "address" : "localhost",        "port" : 2003,        "frequency" : 10      }    ],    "samplers" : [      {        "type" : "statsd",        "address" : "0.0.0.0",        "port" : 8135,        "workers" : 8,        "multisock" : true,        "multimsg" : 8      }    ]  }

【brubeck監聽在8135埠上,用於接收業務方的打點。2003 埠指的是carbon-cache的埠】

./brubeck –config brubeck.json   前台啟動進程

測試打點到brubeck

echo "db.dba.dble2.front_conn:11111|g" | nc -u -w1 127.0.0.1 8135

修改graphite存儲數據的周期

cd /opt/graphite/conf  vim storage-schemas.conf  # Schema definitions for Whisper files. Entries are scanned in order,  # and first match wins. This file is scanned for changes every 60 seconds.  #  [name]  #  pattern = regex  #  retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...  # Carbon's internal metrics. This entry should match what is specified in  # CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings  [carbon]  pattern = ^carbon.  retentions = 60:90d  [service-sla]  pattern = ^service.sla-pct.*  retentions = 10s:2d,1min:8d,10min:365d  [service1-rule]  pattern = ^service1.timers.Rule.*  retentions = 10s:5min,1min:1h,10min:7d  [service1-ic]  pattern = ^service1.counters.IC.*  retentions = 10s:24h,1min:7d  [logstash]  pattern = service1.counters.logstash.*  retentions = 10s:24h,1min:7d  [service1-timers]  pattern = ^service1.timers.*  retentions = 10s:5min,1min:1h,10min:1d,1h:365d  [service]  pattern = ^service1.*  retentions = 10s:24h,1min:6d,10min:365d  [counter]  pattern = ^.*.counters..*  retentions = 10s:24h,1min:7d,10min:30d  [timers]  pattern = ^.*.timers..*  retentions = 10s:5min,1min:1h,10min:1d,1h:30d  [db]  pattern = ^db.*  retentions = 1min:30d  [default_10s_for_1hour]  pattern = .*  retentions = 10s:1h

vim storage-aggregation.conf  內容如下:

[min]  pattern = .min$  xFilesFactor = 0.01  aggregationMethod = min  [max]  pattern = .max$  xFilesFactor = 0.01  aggregationMethod = max  [all_sum]  pattern = .sum$  xFilesFactor = 0.01  aggregationMethod = sum  [all_count]  pattern = .count$  xFilesFactor = 0.01  aggregationMethod = sum  [service1_gauges]  pattern = ^service1.gauges  xFilesFactor = 0.01  aggregationMethod = last  [service1_counters]  pattern = ^service1.counters  xFilesFactor = 0.01  aggregationMethod = sum  [service1]  pattern = ^service1.*  xFilesFactor = 0.01  [default_average]  pattern = .*  xFilesFactor = 0.01  aggregationMethod = average

注意,  修改為上面的2個文件後, 我們需要重啟 carbon-cache進程才能生效。

建議:

1、graphite-web進程,建議通過supervisor來控制啟停。

2、個人認為brubeck比statsd更好使,例如有些機器上可能不便於部署nodejs環境