{"id":3894,"date":"2021-05-29T21:41:04","date_gmt":"2021-05-29T13:41:04","guid":{"rendered":"http:\/\/blog.ywdevops.cn\/?p=3894"},"modified":"2021-06-13T16:41:01","modified_gmt":"2021-06-13T08:41:01","slug":"nginx-3","status":"publish","type":"post","link":"https:\/\/blog.ywdevops.cn\/index.php\/2021\/05\/29\/nginx-3\/","title":{"rendered":"nginx\u6dfb\u52a0nginx-module-vts\u6a21\u5757"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">nginx-module-vts\u6a21\u5757\u4e3b\u8981\u7528\u6765\u76d1\u63a7nginx\u7684\u4e00\u4e9b\u6d41\u91cf\u4fe1\u606f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> vts: vhost_traffic_status(\u4e3b\u673a\u8fd0\u884c\u72b6\u6001) <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u672c\u4f8b\u5b50\u4e2d\uff0c\u5047\u5b9a nginx \u5df2\u7ecf\u5b89\u88c5\u5b8c\u6210(\u7f16\u8bd1\u5b89\u88c5)\uff0c\u73b0\u5728\u9700\u8981\u65b0\u589evts\u6a21\u5757 \uff0c\u53ef\u5148\u901a\u8fc7ps -ef |grep nginx\u67e5\u770b\u5f53\u524d\u8fd0\u884c\u7684nginx\u4e3b\u8fdb\u7a0b\u53f7\u5e76\u8bb0\u4e0b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u4e0b\u8f7d\uff0c\u6267\u884c\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> git clone git:\/\/github.com\/vozlt\/nginx-module-vts.git <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c06\u6587\u4ef6\u5939nginx-module-vts\u79fb\u52a8\u5230\/usr\/local\/nginx\u8def\u5f84\u4e0b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2\u3001\u7f16\u8bd1nginx \u5e76\u6dfb\u52a0\u8be5\u6a21\u5757\uff0c \u7f16\u8bd1\u524d\u5148\u67e5\u770b\u5f53\u524d\u7684nginx\u5df2\u7ecf\u5b89\u88c5\u7684\u6a21\u5757\uff0c\u907f\u514d\u91cd\u65b0\u7f16\u8bd1\u65f6\u6f0f\u6389\u4e86 \uff0c\u6267\u884c\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">nginx -V    \/\/\u6ce8\u610fV\u662f\u5927\u5199<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"131\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/12-2.png\" alt=\"\" class=\"wp-image-3897\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/12-2.png 558w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/12-2-300x70.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"> 3\u3001\u8fdb\u5165nginx\u52a0\u538b\u76ee\u5f55\uff0c\u5e26\u7740\u539f\u6765\u7684\u6a21\u5757\uff0c\u518d\u6dfb\u52a0nginx-module-vts\u6a21\u5757\uff0c\u8fdb\u884c\u7f16\u8bd1 \uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"122\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/14-2.png\" alt=\"\" class=\"wp-image-3898\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/14-2.png 703w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/14-2-300x52.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/14-2-600x104.png 600w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8bd1\u5b8c\u6210\u540e\uff0c\u6267\u884cmake\u547d\u4ee4\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"554\" height=\"102\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/15-2.png\" alt=\"\" class=\"wp-image-3899\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/15-2.png 554w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/15-2-300x55.png 300w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/figure>\n\n\n\n<p class=\"has-background has-luminous-vivid-amber-background-color wp-block-paragraph\">\u6ce8\u610f\uff1a\u4e0d\u8981\u6267\u884cmake install \uff0c\u5426\u5219\u5c31\u4f1a\u5c06\u539f\u6765\u6570\u636e\u8986\u76d6<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4\u3001 \u8fdb\u5165 nginx \u5b89\u88c5\u76ee\u5f55\uff0c\u5c06 sbin \u76ee\u5f55\u4e0b\u7684\u53ef\u6267\u884c\u6587\u4ef6\u5907\u4efd\u4e3a nginx.old \uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"119\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/1-9.png\" alt=\"\" class=\"wp-image-3959\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/1-9.png 551w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/1-9-300x65.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">5\u3001 \u8fdb \u5165 nginx \u6e90\u76ee\u5f55\u4e0b\u7684 objs \u76ee \u5f55 \uff0c\u5c06 \u7f16\u8bd1\u4e4b \u540e \u7684 nginx \u4e8c\u8fdb \u5236 \u6587\u4ef6 \u590d \u5236\u5230 \/usr\/local\/nginx\/sbin \u76ee\u5f55\u4e0b\uff0c\u66ff\u6362\u539f\u6765\u7684 nginx \u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5982\u56fe\uff1a <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"242\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/2-8.png\" alt=\"\" class=\"wp-image-3960\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/2-8.png 553w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/2-8-300x131.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">6\u3001 \u76ee\u524d\u673a\u5668\u4e0a\u6709\u4e24\u4e2a nginx \u8fdb\u7a0b\uff0c\u6b64\u65f6\u9700\u8981\u901a\u8fc7 nginx \u4fe1\u53f7\u63a7\u5236\u65b9\u5f0f\u5c06 nginx \u4e8c\u8fdb\u5236\u5347\u7ea7\u66ff\u6362\u540e\u7684\uff0c\u901a\u8fc7 kill \u2013USER2 `cat \/opt\/nginx\/log\/nginx.pid` (nginx.pid \u4e2d\u7684\u5185\u5bb9\u5373\u662f\u65e7\u7684nginx\u4e3b\u8fdb\u7a0b pid\uff0c\u53ef\u901a\u8fc7 ps \u2013ef |grep nginx \u67e5\u770b) \uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"165\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/3-4.png\" alt=\"\" class=\"wp-image-3961\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/3-4.png 549w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/3-4-300x90.png 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u518d\u6b21\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5b8c\u5168\u628a\u65e7\u7684\u8fdb\u7a0b\u9000\u51fa\uff0c\u542f\u7528\u65b0\u7684\u8fdb\u7a0b\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">kill -WINCH <code>28647<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">kill -QUIT   28647<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">7\u3001 \u6267\u884c\u5b8c\u6210\u540e\u518d\u6b21\u6267\u884c.\/nginx \u2013V \u53ef\u4ee5\u770b\u5230\u6a21\u5757\u5df2\u7ecf\u6dfb\u52a0\u6210\u529f\uff0c\u5982\u56fe\uff1a <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"99\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/4-5.png\" alt=\"\" class=\"wp-image-3962\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/4-5.png 550w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/4-5-300x54.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">8\u3001 \u7f16\u8f91 nginx \u914d\u7f6e\u6587\u4ef6\uff0c\u6dfb\u52a0\u5185\u5bb9\u5982\u4e0b\uff1a <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"315\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/5-5.png\" alt=\"\" class=\"wp-image-3963\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/5-5.png 551w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/5-5-300x172.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">9\u3001 \u91cd\u65b0\u6267\u884c nginx \u91cd\u8f7d\u547d\u4ee4\uff0c.\/nginx \u2013s reload \uff0c\u7136\u540e\u901a\u8fc7\u9875\u9762\u8bbf\u95ee\u5982\u56fe\uff1a <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"283\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/6-5.png\" alt=\"\" class=\"wp-image-3964\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/6-5.png 575w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/05\/6-5-300x148.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">vts\u9875\u9762\u5de6\u4e0b\u89d2\u6709\u4e2ajson\u6570\u636e\u63a5\u53e3\uff0c\u53ef\u4ee5\u901a\u8fc7\u6b64\u63a5\u53e3\u6765\u83b7\u53d6\u6570\u636e\u8fdb\u884c\u5224\u65ad<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u7684\u811a\u672c\u901a\u8fc7python\u7f16\u5199nginx\u76d1\u63a7\u63d2\u4ef6\uff0c\u5e76\u901a\u8fc7\u591c\u83ba\u5b9e\u73b0\u76d1\u63a7\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/python       #\u901a\u8fc7python2\u7f16\u5199\n#-*- coding:utf-8 -*-  #\u6307\u5b9a\u7f16\u7801\n'''\n @\u6b64\u811a\u672c\u7528\u6765\u83b7\u53d6nginx\u7684\u76d1\u63a7\u72b6\u6001\u4fe1\u606f\uff0cjson\u754c\u9762\u7684\u5404\u4e2a\u53c2\u6570\u8bf4\u660e\u5982\u4e0b:\n   servermain:\n      hostname: \u4e3b\u673a\u540d\n      nginxVersion: nginx\u7248\u672c\n      loadMsec: \u4ee5\u6beb\u79d2\u4e3a\u5355\u4f4d\u7684\u5904\u7406\u65f6\u95f4\n      nowMsec: \u4ee5\u6beb\u79d2\u4e3a\u5355\u4f4d\u7684\u5f53\u524d\u65f6\u95f4\n      connections:\n          active:     \u5f53\u524d\u6d3b\u52a8\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u6570\n          reading:    \u8bfb\u53d6\u5ba2\u6237\u7aef\u8fde\u63a5\u7684\u603b\u6570\n          writing:    \u5199\u5165\u5ba2\u6237\u7aef\u8fde\u63a5\u7684\u603b\u6570\n          waiting:    \u6b63\u5728\u7b49\u5f85\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u603b\u6570\n          accepted:   \u63a5\u53d7\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u603b\u6570\n          handled:    \u5df2\u5904\u7406\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u603b\u6570\n          requests:   \u8bf7\u6c42\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u603b\u6570\n          sharedZones:\n          name:       \u914d\u7f6e\u4e2d\u6307\u5b9a\u7684\u5171\u4eab\u5185\u5b58\u540d\u79f0\n          maxSize:    \u914d\u7f6e\u4e2d\u6307\u5b9a\u7684\u5171\u4eab\u5185\u5b58\u7684\u6700\u5927\u5927\u5c0f\u7684\u9650\u5236\n          usedSize:   \u5171\u4eab\u5185\u5b58\u7684\u5f53\u524d\u5927\u5c0f\n          usedNode:   \u5171\u4eab\u5185\u5b58\u4e2d\u5f53\u524d\u4f7f\u7528\u7684\u8282\u70b9\u6570\n   serverZones:\n      requestCounter: \u4ece\u5ba2\u6237\u7aef\u63a5\u6536\u7684\u5ba2\u6237\u7aef\u8bf7\u6c42\u603b\u6570\n      inBytes:    \u4ece\u5ba2\u6237\u7aef\u63a5\u6536\u7684\u603b\u5b57\u8282\u6570\n      outBytes:   \u53d1\u9001\u5230\u5ba2\u6237\u7aef\u7684\u603b\u5b57\u8282\u6570\n      responses: \n          1xx,2xx,3xx,4xx,5xx: \u8868\u793a\u54cd\u5e94\u72b6\u6001\u5417\n          miss:       \u672a\u547d\u4e2d\u7684\u7f13\u5b58\u6570\n          bypass:     \u7ed5\u8fc7\u7f13\u5b58\u65c1\u8def\u6570\n          expired:    \u8fc7\u671f\u7684\u7f13\u5b58\u6570\n          stale:      \u751f\u6548\u7f13\u5b58\u7684\u6570\u91cf\n          updating:   \u7f13\u5b58\u66f4\u65b0\u7684\u6b21\u6570\n          revalidated:\u91cd\u65b0\u9a8c\u8bc1\u7684\u7f13\u5b58\u6570\n          hit:        \u7f13\u5b58\u547d\u4e2d\u6570\n          scarce:     \u672a\u8fbe\u7f13\u5b58\u8981\u6c42\u7684\u8bf7\u6c42\u6b21\u6570\n      requestMsecCounter: \u7d2f\u79ef\u7684\u8bf7\u6c42\u5904\u7406\u65f6\u95f4(\u6beb\u79d2)\n      requestMsec:   \u8bf7\u6c42\u5904\u7406\u65f6\u95f4\u7684\u5e73\u5747\u503c(\u6beb\u79d2)\n   upstreamZones:\n       server: server\u5730\u5740\n       requestCounter: \u8f6c\u53d1\u5230\u6b64\u670d\u52a1\u5668\u7684\u5ba2\u6237\u7aef\u8fde\u63a5\u603b\u6570\n       inBytes: \u4ece\u8be5\u670d\u52a1\u5668\u63a5\u6536\u7684\u603b\u5b57\u8282\u6570\n       outBytes:\u53d1\u9001\u5230\u6b64\u670d\u52a1\u5668\u7684\u603b\u5b57\u8282\u6570\n       responses:\n           1xx,2xx,3xx,4xx,5xx: \u8868\u793a\u54cd\u5e94\u72b6\u6001\u5417\n   requestMsecCounter: \u5305\u62ecupstream\u5728\u5185\u7684\u7d2f\u8ba1\u8bf7\u6c42\u5904\u7406\u65f6\u95f4\u6570(\u6beb\u79d2)\n   requestMsec:\n       time: \u8bf7\u6c42\u5904\u7406\u65f6\u95f4\n       msecs: \u5305\u62ecupstream\u5728\u5185\u7684\u8bf7\u6c42\u5904\u7406\u65f6\u95f4\n   responseMsecCounter: \u4ec5upstream\u54cd\u5e94\u5904\u7406\u65f6\u95f4\u7d2f\u52a0\u503c(\u6beb\u79d2)\n   responseMsecs: \u4ec5upstream\u54cd\u5e94\u5904\u7406\u65f6\u95f4\u5e73\u5747\u503c(\u6beb\u79d2) \n   weight:      server\u7684\u5f53\u524dweight\u503c\n   maxFails:    server\u7684\u5f53\u524dmax_fails\u8bbe\u7f6e\n   failTimeout: server\u7684\u5f53\u524d\u7684fail_timeout\u8bbe\u7f6e\n   backup:      server\u7684\u5f53\u524dbackup\u8bbe\u7f6e\n   down:        \u670d\u52a1\u5668\u7684\u5f53\u524ddown\u8bbe\u7f6e\n   \n'''\nimport requests\nimport json\nimport time\nimport commands\nclass Check_Nginx:\n    ''' \u6b64\u6765\u7528\u6765\u68c0\u6d4bnginx\u6307\u6807'''\n    def __init__(self,result):\n        self.result = result\n        print(json.dumps(self.result)) #\u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\u7c7b\u578b,\u5426\u5219\u591c\u83ba\u4e0d\u8bc6\u522b\ndef main():\n    result = []\n    ip = commands.getoutput('''ifconfig `route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1''')\n    timestamp = int(time.time())\n    r = requests.get('http:\/\/10.88.10.35\/vhost_status\/format\/json')\n    dictt = json.loads(r.text)  #\u5c06json\u6570\u636e\u8f6c\u6362\u4e3a\u5b57\u5178\n    '''\n    \u4e0b\u9762\u4e09\u884c\u7528\u6765\u83b7\u53d6server main\u4e2d\u7684request\u4fe1\u606f\n    nginx\u8fd0\u884c\u65f6\u95f4\u7b49\u4e8enowMsec-loadMsec\uff0c\u7ed3\u679c\u503c\u5355\u4f4d\u4e3a\u6beb\u79d2\n    '''\n    nowMsec = float(dictt.get('nowMsec')) #\u5c06\u6574\u5f62\u8f6c\u6362\u4e3a\u6d6e\u70b9\u578b\n    loadMsec = float(dictt.get('loadMsec'))\n    nginx_uptime = round((nowMsec-loadMsec)\/3600000,2)      #nginx\u8fd0\u884c\u65f6\u95f4,\u5355\u4f4d\u5c0f\u65f6\n    nginx_accept = dictt.get('connections').get('accepted')\n    nginx_handled = dictt.get('connections').get('handled')\n    nginx_requests = dictt.get('connections').get('requests')\n    nginx_active = dictt.get('connections').get('active')\n    nginx_reading = dictt.get('connections').get('reading')\n    nginx_writing = dictt.get('connections').get('writing')\n    nginx_waiting = dictt.get('connections').get('waiting')\n    nginx_uptime = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.uptime',\n        'value': nginx_uptime\n    }\n    nginx_accept = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.accept',\n        'value': nginx_accept\n    }\n    nginx_handled = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.handled',\n        'value': nginx_handled\n    }\n    nginx_request = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.requests',\n        'value': nginx_requests\n    }\n    nginx_active = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.active',\n        'value': nginx_active\n    }\n    nginx_reading = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.reading',\n        'value': nginx_reading\n    }\n    nginx_writing = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.writing',\n        'value': nginx_writing\n    }\n    nginx_waiting = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.waiting',\n        'value': nginx_waiting\n    }\n    result.append(nginx_uptime)\n    result.append(nginx_accept)\n    result.append(nginx_handled)\n    result.append(nginx_request)\n    result.append(nginx_active)\n    result.append(nginx_reading)\n    result.append(nginx_writing)\n    result.append(nginx_waiting)\n    '''\n    \u4e0b\u9762\u7528\u6765\u83b7\u53d6\u5171\u4eab\u5185\u5b58\u7684\u4f7f\u7528\u60c5\u51b5\n    '''\n    sharememory_maxsize = dictt.get('sharedZones').get('maxSize')\n    sharememory_usedsize = dictt.get('sharedZones').get('usedSize')\n    sharememory_usedNode = dictt.get('sharedZones').get('usedNode')\n    server_maxsize = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.sharememory.maxsize',\n        'value': sharememory_maxsize\n    }\n    server_usedsize = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.sharememory.usedsize',\n        'value': sharememory_usedsize\n    }\n    server_usedNode = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.sharememory.usedNode',\n        'value': sharememory_usedNode\n    }\n    result.append(server_maxsize)\n    result.append(server_usedsize)\n    result.append(server_usedNode)\n    '''\n    \u4e0b\u9762\u7684\u7528\u6765\u83b7\u53d6server zones\u4e2d\u7684\u4fe1\u606f\n    '''\n    server_requestCounter = dictt.get('serverZones').get('localhost').get('requestCounter')#serverzone\u7684requests\n    server_inbytes = dictt.get('serverZones').get('localhost').get('inBytes') #traffic Rcvd\n    server_outbytes = dictt.get('serverZones').get('localhost').get('outBytes') #traffic send\n    server_code1 = dictt.get('serverZones').get('localhost').get('responses').get('1xx')\n    server_code2 = dictt.get('serverZones').get('localhost').get('responses').get('2xx')\n    server_code3 = dictt.get('serverZones').get('localhost').get('responses').get('3xx')\n    server_code4 = dictt.get('serverZones').get('localhost').get('responses').get('4xx')\n    server_code5 = dictt.get('serverZones').get('localhost').get('responses').get('5xx')\n    server_requestCounter = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.requestCounter',\n        'value': server_requestCounter\n    }\n    server_inbytes = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.inbytes',\n        'value': server_inbytes\n    }\n    server_outbytes = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.outbytes',\n        'value': server_outbytes\n    }\n    server_code1 = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.1xx',\n        'value': server_code1\n    }\n    server_code2 = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.2xx',\n        'value': server_code2\n    }\n    server_code3 = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.3xx',\n        'value': server_code3\n    }\n    server_code4 = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.4xx',\n        'value': server_code4\n    }\n    server_code5 = {\n        'endpoint': ip,\n        'tags': '',\n        'timestamp': timestamp,\n        'metric': 'nginx.server.5xx',\n        'value': server_code5\n    }\n    result.append(server_requestCounter)\n    result.append(server_inbytes)\n    result.append(server_outbytes)\n    result.append(server_code1)\n    result.append(server_code2)\n    result.append(server_code3)\n    result.append(server_code4)\n    result.append(server_code5)\n    '''\u4e0b\u9762\u7684\u7528\u6765\u83b7\u53d6upstream\u7684\u4fe1\u606f'''\n    upstreamZones = dictt.get('upstreamZones').get('schedule')\n    for i in upstreamZones:  #\u904d\u5386\u5217\u8868\n         get_upstreamip = i.get('server').split(':')[0]#\u83b7\u53d6\u4ee3\u7406\u7684ip\u5730\u5740\n         #get_upstreamip = i.get('server')#\u83b7\u53d6\u4ee3\u7406\u7684ip\u5730\u5740\u548c\u7aef\u53e3\n         get_requestCounter = i.get('requestCounter')\n         get_inBytes = i.get('inBytes')\n         get_outBytes = i.get('outBytes')\n         get_upstream_1xx = i.get('responses').get('1xx')\n         get_upstream_2xx = i.get('responses').get('2xx')\n         get_upstream_3xx = i.get('responses').get('3xx')\n         get_upstream_4xx = i.get('responses').get('4xx')\n         get_upstream_5xx = i.get('responses').get('5xx')\n         get_responseMsec = i.get('responseMsec')\n         get_ip = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.ip',\n             'value': None,\n         }\n         if get_upstreamip is not None:\n             get_ip['value'] = 1\n         else:\n             get_ip['value'] = 0\n         nginx_requestCounter = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.requestCounter',\n             'value': get_requestCounter\n         }\n         nginx_inBytes = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.inBytes',\n             'value': get_inBytes\n         }\n         nginx_outBytes = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.outBytes',\n             'value': get_outBytes\n         }\n         upstream_1xx = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.1xx',\n             'value': get_upstream_1xx\n         }\n         upstream_2xx = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.2xx',\n             'value': get_upstream_2xx\n         }\n         upstream_3xx = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.3xx',\n             'value': get_upstream_3xx\n         }\n         upstream_4xx = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.4xx',\n             'value': get_upstream_4xx\n         }\n         upstream_5xx = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.5xx',\n             'value': get_upstream_5xx\n         }\n         get_responsetime = {\n             'endpoint': ip,\n             'tags': 'upstreamip=%s'%get_upstreamip,\n             'timestamp': timestamp,\n             'metric': 'nginx.upstream.responsetime',\n             'value': get_responseMsec\n         } \n         result.append(get_ip)\n         result.append(nginx_requestCounter)\n         result.append(nginx_inBytes)\n         result.append(nginx_outBytes)\n         result.append(upstream_1xx)\n         result.append(upstream_2xx)\n         result.append(upstream_3xx)\n         result.append(upstream_4xx)\n         result.append(upstream_5xx)\n         result.append(get_responsetime)\n    Check_Nginx(result)\nif __name__ == '__main__':\n    main()\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>nginx-module-vts\u6a21\u5757\u4e3b\u8981\u7528\u6765\u76d1\u63a7nginx\u7684\u4e00\u4e9b\u6d41\u91cf\u4fe1\u606f vts: vhost_traffic [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":3965,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,22],"tags":[],"class_list":["post-3894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-server"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/3894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/comments?post=3894"}],"version-history":[{"count":5,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/3894\/revisions"}],"predecessor-version":[{"id":4057,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/3894\/revisions\/4057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/media\/3965"}],"wp:attachment":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/media?parent=3894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/categories?post=3894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/tags?post=3894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}