Last login: Sun Mar 17 20:20:35 2019 from 10.0.0.3
[root@vmhzpnginx ~]# cd /etc/zabbix[root@vmhzpnginx zabbix]# lszabbix_agentd.conf zabbix_agentd.d[root@vmhzpnginx zabbix]# cp zabbix_agentd.conf zabbix_agentd.conf.bak[root@vmhzpnginx zabbix]# lszabbix_agentd.conf zabbix_agentd.conf.bak zabbix_agentd.d[root@vmhzpnginx zabbix]# cd /etc/nginx[root@vmhzpnginx nginx]# lsclient_body_temp fastcgi_temp logs sbin uwsgi_tempconf html proxy_temp scgi_temp[root@vmhzpnginx nginx]# cd conf[root@vmhzpnginx conf]# lsfastcgi.conf mime.types scgi_params.defaultfastcgi.conf.default mime.types.default uwsgi_paramsfastcgi_params nginx.conf uwsgi_params.defaultfastcgi_params.default nginx.conf.bak win-utfkoi-utf nginx.conf.defaultkoi-win scgi_params[root@vmhzpnginx conf]# cat nginx.conf#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;
events { worker_connections 1024;} http { include mime.types; default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;#keepalive_timeout 0;
keepalive_timeout 65;#gzip on;
server {
listen 80; server_name localhost;#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html; index index.html index.htm; }#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# #location ~ \.php$ { # proxy_pass http://127.0.0.1; #}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias;# location / {
# root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost;# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;# location / {
# root html; # index index.html index.htm; # } #}}
[root@vmhzpnginx conf]# cd /home[root@vmhzpnginx home]# lsnginx-1.15.8 pcre-8.38 wwwnginx-1.15.8.tar.gz pcre-8.38.tar.gz zabbix-get-4.0.0-2.el7.x86_64.rpm[root@vmhzpnginx home]# rpm -qa| grep pythonpython-2.7.5-76.el7.x86_64libselinux-python-2.5-14.1.el7.x86_64python-iniparse-0.4-9.el7.noarchpython-urlgrabber-3.10-9.el7.noarchpython-slip-dbus-0.4.0-4.el7.noarchpython-libs-2.7.5-76.el7.x86_64python-decorator-3.4.0-3.el7.noarchpython-slip-0.4.0-4.el7.noarchpython-linux-procfs-0.4.9-4.el7.noarchnewt-python-0.52.15-4.el7.x86_64python-perf-3.10.0-957.el7.x86_64python-configobj-4.7.2-7.el7.noarchpython-gobject-base-3.22.0-1.el7_4.1.x86_64python-pycurl-7.19.0-19.el7.x86_64dbus-python-1.1.1-9.el7.x86_64python-firewall-0.5.3-5.el7.noarchpython-schedutils-0.4-6.el7.x86_64python-pyudev-0.15-9.el7.noarchrpm-python-4.11.3-35.el7.x86_64[root@vmhzpnginx home]# whereis pythonpython: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz[root@vmhzpnginx home]# lsnginx-1.15.8 pcre-8.38 wwwnginx-1.15.8.tar.gz pcre-8.38.tar.gz zabbix-get-4.0.0-2.el7.x86_64.rpm[root@vmhzpnginx home]# wget https://github.com/adubkov/zbx_nginx_template/archive/master.zip--2019-03-18 08:26:49-- https://github.com/adubkov/zbx_nginx_template/archive/master.zipResolving github.com (github.com)... 52.74.223.119, 13.229.188.59, 13.250.177.223Connecting to github.com (github.com)|52.74.223.119|:443... connected.HTTP request sent, awaiting response... 302 FoundLocation: https://codeload.github.com/adubkov/zbx_nginx_template/zip/master [following]--2019-03-18 08:26:49-- https://codeload.github.com/adubkov/zbx_nginx_template/zip/masterResolving codeload.github.com (codeload.github.com)... 13.229.189.0, 13.250.162.133, 54.251.140.56Connecting to codeload.github.com (codeload.github.com)|13.229.189.0|:443... connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [application/zip]Saving to: ‘master.zip’[ <=> ] 5,524 22.9KB/s in 0.2s
2019-03-18 08:26:50 (22.9 KB/s) - ‘master.zip’ saved [5524]
[root@vmhzpnginx home]# ls
master.zip pcre-8.38 zabbix-get-4.0.0-2.el7.x86_64.rpmnginx-1.15.8 pcre-8.38.tar.gznginx-1.15.8.tar.gz www[root@vmhzpnginx home]# yum install -y unzip zipLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.shu.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.cn99.combase | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 Resolving Dependencies--> Running transaction check---> Package unzip.x86_64 0:6.0-19.el7 will be installed---> Package zip.x86_64 0:3.0-11.el7 will be installed--> Finished Dependency ResolutionDependencies Resolved
=================================================================================
Package Arch Version Repository Size=================================================================================Installing: unzip x86_64 6.0-19.el7 base 170 k zip x86_64 3.0-11.el7 base 260 kTransaction Summary
=================================================================================Install 2 PackagesTotal download size: 430 k
Installed size: 1.1 MDownloading packages:(1/2): unzip-6.0-19.el7.x86_64.rpm | 170 kB 00:00:00 (2/2): zip-3.0-11.el7.x86_64.rpm | 260 kB 00:00:00 ---------------------------------------------------------------------------------Total 1.2 MB/s | 430 kB 00:00 Running transaction checkRunning transaction testTransaction test succeededRunning transactionWarning: RPMDB altered outside of yum. Installing : zip-3.0-11.el7.x86_64 1/2 Installing : unzip-6.0-19.el7.x86_64 2/2 Verifying : unzip-6.0-19.el7.x86_64 1/2 Verifying : zip-3.0-11.el7.x86_64 2/2Installed:
unzip.x86_64 0:6.0-19.el7 zip.x86_64 0:3.0-11.el7Complete!
[root@vmhzpnginx home]# unzip master.zip Archive: master.zipe3484c88ee0cd9fb5ffa6765b8c3e0cf55c1e4f2 creating: zbx_nginx_template-master/ inflating: zbx_nginx_template-master/README.md inflating: zbx_nginx_template-master/zbx_nginx_stats.py inflating: zbx_nginx_template-master/zbx_nginx_templates.xml [root@vmhzpnginx home]# lsmaster.zip pcre-8.38 zabbix-get-4.0.0-2.el7.x86_64.rpmnginx-1.15.8 pcre-8.38.tar.gz zbx_nginx_template-masternginx-1.15.8.tar.gz www[root@vmhzpnginx home]# cd zbx_nginx_template-master[root@vmhzpnginx zbx_nginx_template-master]# lsREADME.md zbx_nginx_stats.py zbx_nginx_templates.xml[root@vmhzpnginx zbx_nginx_template-master]# lltotal 56-rwxr-xr-x 1 root root 1979 Dec 16 2017 README.md-rwxr-xr-x 1 root root 5614 Dec 16 2017 zbx_nginx_stats.py-rwxr-xr-x 1 root root 42775 Dec 16 2017 zbx_nginx_templates.xml[root@vmhzpnginx zbx_nginx_template-master]# pwd/home/zbx_nginx_template-master[root@vmhzpnginx zbx_nginx_template-master]# cd /etc/zabbix[root@vmhzpnginx zabbix]# lszabbix_agentd.conf zabbix_agentd.conf.bak zabbix_agentd.d[root@vmhzpnginx zabbix]# mkdir scripts[root@vmhzpnginx zabbix]# cd scripts[root@vmhzpnginx scripts]# ls[root@vmhzpnginx scripts]# pwd/etc/zabbix/scripts[root@vmhzpnginx scripts]# cd /home/zbx_nginx_template-master[root@vmhzpnginx zbx_nginx_template-master]# lsREADME.md zbx_nginx_stats.py zbx_nginx_templates.xml[root@vmhzpnginx zbx_nginx_template-master]# cp zbx_nginx_stats.py /etc/zabbix/scripts[root@vmhzpnginx zbx_nginx_template-master]# cd /etc/zabbix/scripts[root@vmhzpnginx scripts]# lszbx_nginx_stats.py[root@vmhzpnginx scripts]# cat zbx_nginx_stats.py#!/usr/bin/pythonimport urllib2, base64, re, struct, time, socket, sys, datetime, os.path
try:
import jsonexcept: import simplejson as jsonzabbix_host = '127.0.0.1' # Zabbix server IP
zabbix_port = 10051 # Zabbix server porthostname = 'Zabbix Agent' # Name of monitored host, like it shows in zabbix web uitime_delta = 1 # grep interval in minutes# URL to nginx stat (http_stub_status_module)
stat_url = 'https://nginx.server/nginx_stat'# Nginx log file path
nginx_log_file_path = '/var/log/nginx/access.log'# Optional Basic Auth
username = 'user'password = 'pass'# Temp file, with log file cursor position
seek_file = '/tmp/nginx_log_stat' class Metric(object): def __init__(self, host, key, value, clock=None): self.host = host self.key = key self.value = value self.clock = clockdef __repr__(self):
if self.clock is None: return 'Metric(%r, %r, %r)' % (self.host, self.key, self.value) return 'Metric(%r, %r, %r, %r)' % (self.host, self.key, self.value, self.clock)def send_to_zabbix(metrics, zabbix_host='127.0.0.1', zabbix_port=10051):
j = json.dumps metrics_data = [] for m in metrics: clock = m.clock or ('%d' % time.time()) metrics_data.append(('{"host":%s,"key":%s,"value":%s,"clock":%s}') % (j(m.host), j(m.key), j(m.value), j(clock))) json_data = ('{"request":"sender data","data":[%s]}') % (','.join(metrics_data)) data_len = struct.pack('<Q', len(json_data)) packet = 'ZBXD\x01'+ data_len + json_data #print packet #print ':'.join(x.encode('hex') for x in packet)try:
zabbix = socket.socket() zabbix.connect((zabbix_host, zabbix_port)) zabbix.sendall(packet) resp_hdr = _recv_all(zabbix, 13) if not resp_hdr.startswith('ZBXD\x01') or len(resp_hdr) != 13: print 'Wrong zabbix response' return False resp_body_len = struct.unpack('<Q', resp_hdr[5:])[0] resp_body = zabbix.recv(resp_body_len) zabbix.close()resp = json.loads(resp_body)
#print resp if resp.get('response') != 'success': print 'Got error from Zabbix: %s' % resp return False return True except: print 'Error while sending data to Zabbix' return False def _recv_all(sock, count): buf = '' while len(buf)<count: chunk = sock.recv(count-len(buf)) if not chunk: return buf buf += chunk return buf def get(url, login, passwd): req = urllib2.Request(url) if login and passwd: base64string = base64.encodestring('%s:%s' % (login, passwd)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) q = urllib2.urlopen(req) res = q.read() q.close() return resdef parse_nginx_stat(data):
a = {} # Active connections a['active_connections'] = re.match(r'(.*):\s(\d*)', data[0], re.M | re.I).group(2) # Accepts a['accepted_connections'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(1) # Handled a['handled_connections'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(2) # Requests a['handled_requests'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(3) # Reading a['header_reading'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(2) # Writing a['body_reading'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(4) # Waiting a['keepalive_connections'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(6) return a def read_seek(file): if os.path.isfile(file): f = open(file, 'r') try: result = int(f.readline()) f.close() return result except: return 0 else: return 0def write_seek(file, value):
f = open(file, 'w') f.write(value) f.close() #print '[12/Mar/2014:03:21:13 +0400]'d = datetime.datetime.now()-datetime.timedelta(minutes=time_delta)
minute = int(time.mktime(d.timetuple()) / 60)*60d = d.strftime('%d/%b/%Y:%H:%M')total_rps = 0
rps = [0]*60tps = [0]*60res_code = {}nf = open(nginx_log_file_path, 'r')
new_seek = seek = read_seek(seek_file)
# if new log file, don't do seek
if os.path.getsize(nginx_log_file_path) > seek: nf.seek(seek)line = nf.readline()
while line: if d in line: new_seek = nf.tell() total_rps += 1 sec = int(re.match('(.*):(\d+):(\d+):(\d+)\s.*]', line).group(4)) code = re.match(r'(.*)"\s(\d*)\s', line).group(2) if code in res_code: res_code[code] += 1 else: res_code[code] = 1rps[sec] += 1
line = nf.readline()if total_rps != 0:
write_seek(seek_file, str(new_seek))nf.close()
metric = (len(sys.argv) >= 2) and re.match(r'nginx\[(.*)\]', sys.argv[1], re.M | re.I).group(1) or False
data = get(stat_url, username, password).split('\n')data = parse_nginx_stat(data)data_to_send = []
# Adding the metrics to response
if not metric: for i in data: data_to_send.append(Metric(hostname, ('nginx[%s]' % i), data[i]))else: print data[metric]# Adding the request per seconds to response
for t in range(0,60): data_to_send.append(Metric(hostname, 'nginx[rps]', rps[t], minute+t))# Adding the response codes stats to respons
for t in res_code: data_to_send.append(Metric(hostname, ('nginx[%s]' % t), res_code[t])) send_to_zabbix(data_to_send, zabbix_host, zabbix_port)[root@vmhzpnginx scripts]# vim zbx_nginx_stats.py#!/usr/bin/pythonimport urllib2, base64, re, struct, time, socket, sys, datetime, os.path
try:
import jsonexcept: import simplejson as jsonzabbix_host = '127.0.0.1' # Zabbix server IP
zabbix_port = 10051 # Zabbix server porthostname = 'Zabbix Agent' # Name of monitored host, like it shows in zabbix web uitime_delta = 1 # grep interval in minutes# URL to nginx stat (http_stub_status_module)
stat_url = 'https://nginx.server/nginx_stat'# Nginx log file path
nginx_log_file_path = '/var/log/nginx/access.log'# Optional Basic Auth
username = 'user'password = 'pass'# Temp file, with log file cursor position
seek_file = '/tmp/nginx_log_stat' class Metric(object):hostname = 'Zabbix Agen' # Name of monitored host, like it shows in zabbix web hostname = 'Zabbix Age' # Name of monitored host, like it shows in zabbix web u return 'Metric(%r, %r, %r)' % (self.host, self.key, self.value)hostname = 'vmhzpnginx' # Name of monitored host, like it shows in zabbix web u"zbx_nginx_stats.py" 196L, 5611C written [root@vmhzpnginx scripts]# pwd/etc/zabbix/scripts[root@vmhzpnginx scripts]# cd /etc/nginx[root@vmhzpnginx nginx]# lsclient_body_temp fastcgi_temp logs sbin uwsgi_tempconf html proxy_temp scgi_temp[root@vmhzpnginx nginx]# cd logs[root@vmhzpnginx logs]# lsaccess.log error.log nginx.pid[root@vmhzpnginx tmp]# cd /etc/nginx[root@vmhzpnginx nginx]# lsclient_body_temp fastcgi_temp logs sbin uwsgi_tempconf html proxy_temp scgi_temp[root@vmhzpnginx nginx]# cd logs[root@vmhzpnginx logs]# pwd/etc/nginx/logs[root@vmhzpnginx logs]# cd /home[root@vmhzpnginx home]# lsmaster.zip pcre-8.38 zabbix-get-4.0.0-2.el7.x86_64.rpmnginx-1.15.8 pcre-8.38.tar.gz zbx_nginx_template-masternginx-1.15.8.tar.gz www[root@vmhzpnginx home]# cd /etc/zabbix[root@vmhzpnginx zabbix]# lsscripts zabbix_agentd.conf zabbix_agentd.conf.bak zabbix_agentd.d[root@vmhzpnginx zabbix]# cd scripts[root@vmhzpnginx scripts]# lszbx_nginx_stats.py[root@vmhzpnginx scripts]# vim zbx_nginx_stats.py#!/usr/bin/pythonimport urllib2, base64, re, struct, time, socket, sys, datetime, os.path
try:
import jsonexcept: import simplejson as jsonzabbix_host = '172.16.1.214' # Zabbix server IP
zabbix_port = 10051 # Zabbix server porthostname = 'vmhzpnginx' # Name of monitored host, like it shows in zabbix web uitime_delta = 1 # grep interval in minutes# URL to nginx stat (http_stub_status_module)
stat_url = 'http://127.0.0.1/nginx_stat'# Nginx log file path
nginx_log_file_path = '/var/log/nginx/access.log'# Optional Basic Auth
username = 'user'password = 'pass'# Temp file, with log file cursor position
seek_file = '/tmp/nginx_log_stat' class Metric(object):"zbx_nginx_stats.py" 196L, 5629C written [root@vmhzpnginx scripts]# cat zbx_nginx_stats.py#!/usr/bin/pythonimport urllib2, base64, re, struct, time, socket, sys, datetime, os.path
try:
import jsonexcept: import simplejson as jsonzabbix_host = '172.16.1.***' # Zabbix server IP
zabbix_port = 10051 # Zabbix server porthostname = 'vmhzpnginx' # Name of monitored host, like it shows in zabbix web uitime_delta = 1 # grep interval in minutes# URL to nginx stat (http_stub_status_module)
stat_url = 'http://127.0.0.1/nginx_stat'# Nginx log file path
nginx_log_file_path = '/etc/nginx/logs/access.log'# Optional Basic Auth
username = 'zabbix'password = '*****'# Temp file, with log file cursor position
seek_file = '/etc/nginx/logs/nginx_log_stat' class Metric(object): def __init__(self, host, key, value, clock=None): self.host = host self.key = key self.value = value self.clock = clockdef __repr__(self):
if self.clock is None: return 'Metric(%r, %r, %r)' % (self.host, self.key, self.value) return 'Metric(%r, %r, %r, %r)' % (self.host, self.key, self.value, self.clock)def send_to_zabbix(metrics, zabbix_host='127.0.0.1', zabbix_port=10051):
j = json.dumps metrics_data = [] for m in metrics: clock = m.clock or ('%d' % time.time()) metrics_data.append(('{"host":%s,"key":%s,"value":%s,"clock":%s}') % (j(m.host), j(m.key), j(m.value), j(clock))) json_data = ('{"request":"sender data","data":[%s]}') % (','.join(metrics_data)) data_len = struct.pack('<Q', len(json_data)) packet = 'ZBXD\x01'+ data_len + json_data #print packet #print ':'.join(x.encode('hex') for x in packet)try:
zabbix = socket.socket() zabbix.connect((zabbix_host, zabbix_port)) zabbix.sendall(packet) resp_hdr = _recv_all(zabbix, 13) if not resp_hdr.startswith('ZBXD\x01') or len(resp_hdr) != 13: print 'Wrong zabbix response' return False resp_body_len = struct.unpack('<Q', resp_hdr[5:])[0] resp_body = zabbix.recv(resp_body_len) zabbix.close()resp = json.loads(resp_body)
#print resp if resp.get('response') != 'success': print 'Got error from Zabbix: %s' % resp return False return True except: print 'Error while sending data to Zabbix' return False def _recv_all(sock, count): buf = '' while len(buf)<count: chunk = sock.recv(count-len(buf)) if not chunk: return buf buf += chunk return buf def get(url, login, passwd): req = urllib2.Request(url) if login and passwd: base64string = base64.encodestring('%s:%s' % (login, passwd)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) q = urllib2.urlopen(req) res = q.read() q.close() return resdef parse_nginx_stat(data):
a = {} # Active connections a['active_connections'] = re.match(r'(.*):\s(\d*)', data[0], re.M | re.I).group(2) # Accepts a['accepted_connections'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(1) # Handled a['handled_connections'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(2) # Requests a['handled_requests'] = re.match(r'\s(\d*)\s(\d*)\s(\d*)', data[2], re.M | re.I).group(3) # Reading a['header_reading'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(2) # Writing a['body_reading'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(4) # Waiting a['keepalive_connections'] = re.match(r'(.*):\s(\d*)(.*):\s(\d*)(.*):\s(\d*)', data[3], re.M | re.I).group(6) return a def read_seek(file): if os.path.isfile(file): f = open(file, 'r') try: result = int(f.readline()) f.close() return result except: return 0 else: return 0def write_seek(file, value):
f = open(file, 'w') f.write(value) f.close() #print '[12/Mar/2014:03:21:13 +0400]'d = datetime.datetime.now()-datetime.timedelta(minutes=time_delta)
minute = int(time.mktime(d.timetuple()) / 60)*60d = d.strftime('%d/%b/%Y:%H:%M')total_rps = 0
rps = [0]*60tps = [0]*60res_code = {}nf = open(nginx_log_file_path, 'r')
new_seek = seek = read_seek(seek_file)
# if new log file, don't do seek
if os.path.getsize(nginx_log_file_path) > seek: nf.seek(seek)line = nf.readline()
while line: if d in line: new_seek = nf.tell() total_rps += 1 sec = int(re.match('(.*):(\d+):(\d+):(\d+)\s.*]', line).group(4)) code = re.match(r'(.*)"\s(\d*)\s', line).group(2) if code in res_code: res_code[code] += 1 else: res_code[code] = 1rps[sec] += 1
line = nf.readline()if total_rps != 0:
write_seek(seek_file, str(new_seek))nf.close()
metric = (len(sys.argv) >= 2) and re.match(r'nginx\[(.*)\]', sys.argv[1], re.M | re.I).group(1) or False
data = get(stat_url, username, password).split('\n')data = parse_nginx_stat(data)data_to_send = []
# Adding the metrics to response
if not metric: for i in data: data_to_send.append(Metric(hostname, ('nginx[%s]' % i), data[i]))else: print data[metric]# Adding the request per seconds to response
for t in range(0,60): data_to_send.append(Metric(hostname, 'nginx[rps]', rps[t], minute+t))# Adding the response codes stats to respons
for t in res_code: data_to_send.append(Metric(hostname, ('nginx[%s]' % t), res_code[t])) send_to_zabbix(data_to_send, zabbix_host, zabbix_port)[root@vmhzpnginx scripts]# chmod u+x zbx_nginx_stats.py[root@vmhzpnginx scripts]# lltotal 8-rwxr-xr-x 1 root root 5629 Mar 18 08:48 zbx_nginx_stats.py[root@vmhzpnginx scripts]# cd /etc/nginx[root@vmhzpnginx nginx]# lsclient_body_temp fastcgi_temp logs sbin uwsgi_tempconf html proxy_temp scgi_temp[root@vmhzpnginx nginx]# cd conf[root@vmhzpnginx conf]# lsfastcgi.conf mime.types scgi_params.defaultfastcgi.conf.default mime.types.default uwsgi_paramsfastcgi_params nginx.conf uwsgi_params.defaultfastcgi_params.default nginx.conf.bak win-utfkoi-utf nginx.conf.defaultkoi-win scgi_params[root@vmhzpnginx conf]# vim nginx.conf#user nobody;worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;
events { worker_connections 1024;} http { include mime.types; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' sendfile on; #keepalive_timeout 0;events { worker_connections 1024;events { worker_connections 1024;events { worker_connections 1024;events { worker_connections 1024;#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html; index index.html index.htm; }#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# #location ~ \.php$ { # proxy_pass http://127.0.0.1; # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# #location ~ \.php$ { # proxy_pass http://127.0.0.1; #}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias;# location / {
# root html; # index index.html index.htm; # } #} #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost;# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;
"nginx.conf" 127L, 3034C written [root@vmhzpnginx conf]# cat nginx.conf#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;
events { worker_connections 1024;} http { include mime.types; default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;#keepalive_timeout 0;
keepalive_timeout 65;#gzip on;
server {
listen 80; server_name localhost;#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html; index index.html index.htm; }location /nginx_stat {
stub_status on; # Turn on nginx stats access_log off; # We do not need logs for stats allow 127.0.0.1; # Security: Only allow access from IP allow 172.16.1.214; allow 172.16.1.222; #allow ::1; # Security IPv6: allow only from localhost #deny all; # Deny requests from the other of the world }#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# #location ~ \.php$ { # proxy_pass http://127.0.0.1; #}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias;# location / {
# root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost;# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;# location / {
# root html; # index index.html index.htm; # } #}}
[root@vmhzpnginx conf]# [root@vmhzpnginx conf]# systemctl restart nginx[root@vmhzpnginx conf]# systemctl status nginx ● nginx.service - nginx service Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-03-18 08:53:57 CST; 7s ago Process: 14677 ExecStop=/etc/nginx/sbin/nginx -s quit (code=exited, status=0/SUCCESS) Process: 14681 ExecStart=/etc/nginx/sbin/nginx (code=exited, status=0/SUCCESS) Main PID: 14682 (nginx) CGroup: /system.slice/nginx.service ├─14682 nginx: master process /etc/nginx/sbin/nginx └─14683 nginx: worker processMar 18 08:53:57 vmhzpnginx systemd[1]: Stopped nginx service.
Mar 18 08:53:57 vmhzpnginx systemd[1]: Starting nginx service...Mar 18 08:53:57 vmhzpnginx systemd[1]: Started nginx service.[root@vmhzpnginx sbin]# ./nginx -t nginx: the configuration file /etc/nginx/conf/nginx.conf syntax is oknginx: configuration file /etc/nginx/conf/nginx.conf test is successful[root@vmhzpnginx sbin]# crontab -lno crontab for root[root@vmhzpnginx sbin]# crontab -e[root@vmhzpnginx sbin]# crontab -l/1 * * * * /etc/zabbix/scripts/zbx_nginx_stats.pyi*/1 * * * * /etc/zabbix/script--------------------------------------
后续需要在zabbix web页面上导入zbx_export_templates.xml模板,并且设置主机的模板关联即可实现图形界面监控Nginx状况;