{"id":776,"date":"2022-04-28T16:53:47","date_gmt":"2022-04-28T08:53:47","guid":{"rendered":"https:\/\/www.aiqinqin.info\/?p=776"},"modified":"2022-05-07T16:53:31","modified_gmt":"2022-05-07T08:53:31","slug":"prometheus-%e7%9b%91%e6%8e%a7%e6%90%ad%e5%bb%ba","status":"publish","type":"post","link":"https:\/\/www.aiqinqin.info\/?p=776","title":{"rendered":"prometheus \u76d1\u63a7\u4f53\u7cfb\u642d\u5efa"},"content":{"rendered":"<h4>prometheus \u642d\u5efa<\/h4>\n<ol>\n<li>\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u4e0b\u8f7d prometheus, \u5e76\u505a\u89e3\u538b\u7b49\u52a8\u4f5c\n<pre><code class=\"\">mkdir -p \/opt\/monitor &amp;&amp; cd \/opt\/monitor\nwget https:\/\/github.com\/prometheus\/prometheus\/releases\/download\/v2.35.0\/prometheus-2.35.0.linux-amd64.tar.gz\ntar xvf prometheus-2.35.0.linux-amd64.tar.gz &amp;&amp; mv prometheus-2.35.0.linux-amd64 prometheus\nmkdir -p \/opt\/monitor\/prometheus\/data\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 supervisor \u542f\u52a8 prometheus\uff0c supervisor \u91cc\u9762\u7684\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b, \u5b89\u88c5 supervisor \u53c2\u8003 <em><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.aiqinqin.info\/?p=552\" title=\"supervisor\u5b89\u88c5\">supervisor\u5b89\u88c5<\/a><\/em>\uff1a\n<pre><code class=\"\">[program:prometheus]\nprocess_name=%(program_name)s\ncommand=\/opt\/monitor\/prometheus\/prometheus --config.file=\/opt\/monitor\/prometheus\/prometheus.yml --storage.tsdb.path=\/opt\/monitor\/prometheus\/data --storage.tsdb.retention=60d --log.level=info --web.listen-address=\"192.168.19.69:9090\" \nautostart=true\nautorestart=true\nuser=root\nredirect_stderr=true\nstdout_logfile=\/var\/log\/supervisor\/prometheus.log\n<\/code><\/pre>\n<\/li>\n<li>\u5176\u4e2d &#8220;\/opt\/monitor\/prometheus\/prometheus.yml&#8221; \u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a\n<pre><code class=\"\"># my global config\nglobal:\n  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.\n  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.\n  # scrape_timeout is set to the global default (10s).\n\n# Alertmanager configuration\nalerting:\n  alertmanagers:\n    - static_configs:\n        - targets:\n          # - alertmanager:9093\n\n# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.\nrule_files:\n  # - \"first_rules.yml\"\n  # - \"second_rules.yml\"\n\n# A scrape configuration containing exactly one endpoint to scrape:\n# Here it's Prometheus itself.\nscrape_configs:\n  # The job name is added as a label `job=&lt;job_name&gt;` to any timeseries scraped from this config.\n  - job_name: \"prometheus\"\n\n    # metrics_path defaults to '\/metrics'\n    # scheme defaults to 'http'.\n\n    static_configs:\n      - targets: [\"192.168.19.69:9090\"]\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 &#8220;supervisorctl update&#8221; \u547d\u4ee4\u4f7f\u521a\u521a\u6dfb\u52a0\u7684\u914d\u7f6e\u6587\u4ef6\u751f\u6548, \u4f7f\u7528&#8221;supervisorctl  status&#8221; \u67e5\u770b promethus \u662f\u5426\u542f\u52a8\u6210\u529f<\/li>\n<li>\u4f7f\u7528&#8221;http:\/\/192.168.19.69:9090\/&#8221; \u8bbf\u95ee\u770b\u662f\u5426\u6210\u529f<\/li>\n<\/ol>\n<h4>node_exporter \u642d\u5efa<\/h4>\n<ol>\n<li>\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u4e0b\u8f7d\u5e76\u89e3\u538b [program:node_exporter]\n<pre><code class=\"\">mkdir -p \/opt\/monitor &amp;&amp; cd \/opt\/monitor\nwget https:\/\/github.com\/prometheus\/node_exporter\/releases\/download\/v1.3.1\/node_exporter-1.3.1.linux-amd64.tar.gz\ntar xvf node_exporter-1.3.1.linux-amd64.tar.gz &amp;&amp; mv node_exporter-1.3.1.linux-amd64 node_exporter\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 supervisor \u542f\u52a8 3. \u5176\u4e2d &#8220;\/opt\/monitor\/prometheus\/prometheus.yml&#8221; \u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a\uff0c supervisor \u91cc\u9762\u7684\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b, \u5b89\u88c5 supervisor \u53c2\u8003 <em><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.aiqinqin.info\/?p=552\" title=\"supervisor\u5b89\u88c5\">supervisor\u5b89\u88c5<\/a><\/em>\uff1a\n<pre><code class=\"\">[program:node_exporter]\nprocess_name=%(program_name)s\ncommand=\/opt\/monitor\/node_exporter\/node_exporter  --web.listen-address=\"192.168.19.69:9111\"  --web.config=\"\/opt\/monitor\/node_exporter\/config.yaml\"\nautostart=true\nautorestart=true\nuser=root\nredirect_stderr=true\nstdout_logfile=\/var\/log\/supervisor\/node_exporter.log\n<\/code><\/pre>\n<\/li>\n<li>\u5176\u4e2d\u201c\/opt\/monitor\/node_exporter\/config.yaml\u201d\u7684\u914d\u7f6e\u6587\u4ef6\u5982\uff0c\u8fd9\u513f\u4f7f\u7528\u4e86  htpasswd  \u6765\u751f\u6210\u5bc6\u7801\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u7528\u6237\u540d\u548c\u5bc6\u7801\uff0c \u751f\u6210\u5bc6\u7801\u7684\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0&#8221;https:\/\/www.cnblogs.com\/xjzyy\/p\/15602929.html&#8221;\n<pre><code class=\"\">basic_auth_users:\n  prometheus: your_password\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 &#8220;supervisorctl update&#8221; \u547d\u4ee4\u4f7f\u521a\u521a\u6dfb\u52a0\u7684\u914d\u7f6e\u6587\u4ef6\u751f\u6548, \u4f7f\u7528&#8221;supervisorctl  status&#8221; \u67e5\u770b node_exporter \u662f\u5426\u542f\u52a8\u6210\u529f<\/li>\n<li>\u4fee\u6539 &#8220;\/opt\/monitor\/prometheus\/prometheus.yml&#8221; \u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff0c \u6dfb\u52a0 node_exporter \u7684\u914d\u7f6e\n<pre><code class=\"\"># my global config\nglobal:\n  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.\n  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.\n  # scrape_timeout is set to the global default (10s).\n\n# Alertmanager configuration\nalerting:\n  alertmanagers:\n    - static_configs:\n        - targets:\n          # - alertmanager:9093\n\n# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.\nrule_files:\n  # - \"first_rules.yml\"\n  # - \"second_rules.yml\"\n\n# A scrape configuration containing exactly one endpoint to scrape:\n# Here it's Prometheus itself.\nscrape_configs:\n  # The job name is added as a label `job=&lt;job_name&gt;` to any timeseries scraped from this config.\n  - job_name: \"prometheus\"\n\n    # metrics_path defaults to '\/metrics'\n    # scheme defaults to 'http'.\n\n    static_configs:\n      - targets: [\"192.168.19.69:9090\"]\n\n  - job_name: '69_node_exporter'\n    scrape_interval: 5s\n    scheme: http\n    basic_auth:\n      username: prometheus\n      password: your_password # \u8fd9\u513f\u7684\u5bc6\u7801\u5c31\u662f node_export \u8bbe\u7f6e\u7684\u5bc6\u7801\n    static_configs:\n    - targets: ['192.168.19.69:9111']\n      labels:\n        instance: 19.168.19.69\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 \u201c supervisorctl  restart prometheus\u201d \u91cd\u65b0\u542f\u52a8 prometheus, \u4f7f\u914d\u7f6e\u6587\u4ef6\u751f\u6548<\/p>\n<\/li>\n<\/ol>\n<h5>grafana \u5b89\u88c5<\/h5>\n<ol>\n<li>\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4\u5b89\u88c5 grafana\n<pre><code class=\"\">mkdir -p \/opt\/monitor &amp;&amp; cd \/opt\/monitor\nwget https:\/\/dl.grafana.com\/enterprise\/release\/grafana-enterprise-8.5.0.linux-amd64.tar.gz\ntar xvf grafana-enterprise-8.5.0.linux-amd64.tar.gz &amp;&amp; mv grafana-8.5.0\/ grafana\ncd \/opt\/monitor\/grafana\/conf &amp;&amp; cp sample.ini grafana.ini\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 supervisor \u542f\u52a8 grafana\uff0c supervisor \u91cc\u9762\u7684\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b, \u5b89\u88c5 supervisor \u53c2\u8003 <em><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.aiqinqin.info\/?p=552\" title=\"supervisor\u5b89\u88c5\">supervisor\u5b89\u88c5<\/a><\/em>\uff1a\n<pre><code class=\"\">[program:grafana]\nprocess_name=%(program_name)s\ndirectory=\/opt\/monitor\/grafana\/bin\ncommand=\/opt\/monitor\/grafana\/bin\/grafana-server -config \/opt\/monitor\/grafana\/conf\/grafana.ini\nautostart=true\nautorestart=true\nuser=root\nredirect_stderr=true\nstdout_logfile=\/var\/log\/supervisor\/grafana.log\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 &#8220;supervisorctl update&#8221; \u547d\u4ee4\u4f7f\u521a\u521a\u6dfb\u52a0\u7684\u914d\u7f6e\u6587\u4ef6\u751f\u6548, \u4f7f\u7528&#8221;supervisorctl  status&#8221; \u67e5\u770b grafana \u662f\u5426\u542f\u52a8\u6210\u529f<\/li>\n<li>\u4f7f\u7528&#8221;http:\/\/192.168.19.69:3000\/login&#8221; \u767b\u5f55. \u9ed8\u8ba4\u7528\u6237\u540d\u548c\u5bc6\u7801\u90fd\u662fadmin,\u7136\u540e\u70b9\u51fb\u8bbe\u7f6e\u6dfb\u52a0\u6570\u636e\u6e90, \u6570\u636e\u6e90\u9009\u62e9 promethus \uff0c url\u4f7f\u7528\u201chttp:\/\/192.168.19.59:9090\u201d<\/li>\n<li>\u70b9\u51fb &#8220;+&#8221; \u201cimport\u201d \u8f93\u5165ID \u201c1860\u201d \u9009\u62e9 &#8220;prometheus&#8221; \u7136\u540e\u5bfc\u5165<\/li>\n<\/ol>\n<h5>alertmanager \u5b89\u88c5<\/h5>\n<ol>\n<li>\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4\u5b89\u88c5 alertmanager\n<pre><code class=\"\">mkdir -p \/opt\/monitor &amp;&amp; cd \/opt\/monitor\nhttps:\/\/github.com\/prometheus\/alertmanager\/releases\/download\/v0.24.0\/alertmanager-0.24.0.linux-amd64.tar.gz\ntar xvf alertmanager-0.24.0.linux-amd64.tar.gz &amp;&amp; mv alertmanager-0.24.0.linux-amd64\/ alertmanager\nmkdir -p \/opt\/monitor\/alertmanager\/template\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 supervisor \u542f\u52a8 alertmanager\uff0c supervisor \u91cc\u9762\u7684\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b, \u5b89\u88c5 supervisor \u53c2\u8003 <em><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.aiqinqin.info\/?p=552\" title=\"supervisor\u5b89\u88c5\">supervisor\u5b89\u88c5<\/a><\/em>\uff1a\n<pre><code class=\"\">[program:alertmanager]\nprocess_name=%(program_name)s\ncommand=\/opt\/monitor\/alertmanager\/alertmanager --config.file=\"\/opt\/monitor\/alertmanager\/alertmanager.yml\"   --web.listen-address=\"192.168.19.69:9993\"  --cluster.listen-address=\"192.168.19.69:9994\"\nautostart=true\nautorestart=true\nuser=root\nredirect_stderr=true\nstdout_logfile=\/var\/log\/supervisor\/alertmanager.log\n<\/code><\/pre>\n<\/li>\n<li>\n<p>\u5176\u4e2d&#8221;\/opt\/monitor\/alertmanager\/alertmanager.yml&#8221;\u91cc\u9762\u7684\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"\">global:\n  resolve_timeout: 5m\n\ntemplates:\n  - '\/opt\/monitor\/alertmanager\/template\/test.tmpl'\n\nroute:\n  group_by: ['alertname']\n  group_wait: 5s\n  group_interval: 5s\n  repeat_interval: 2m\n  receiver: 'wechat'\n\nreceivers:\n- name: 'web.hook'\n  webhook_configs:\n  - url: 'http:\/\/127.0.0.1:5001\/'\n- name: 'wechat'  # \u4e0b\u9762\u8fd9\u4e00\u6bb5\u662f\u4f01\u4e1a\u5fae\u4fe1\u7684\u62a5\u8b66\u8bbe\u7f6e\uff0c\u9700\u8981\u81ea\u5df1\u5148\u7533\u8bf7\u5e94\u7528\n  wechat_configs:\n    - send_resolved: true\n      agent_id: 'your_agent'\n      to_user: 'your_name'\n      api_secret: 'your_api_secret'\n      corp_id: 'your_corp_id'\n<\/code><\/pre>\n<\/li>\n<li>\u5176\u4e2d&#8221;\/opt\/monitor\/alertmanager\/template\/test.tmpl&#8221;\u91cc\u9762\u7684\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff0c \u91cc\u9762\u662f\u8bbe\u7f6e\u7684\u62a5\u8b66\u683c\u5f0f\u8bbe\u7f6e\n<pre><code class=\"\">{{ define \"wechat.default.message\" }}\n{{ range $i, $alert :=.Alerts }}\n=======  \u76d1\u63a7\u62a5\u8b66  =========\n\u544a\u8b66\u72b6\u6001\uff1a{{ .Status }}\n\u544a\u8b66\u7ea7\u522b\uff1a{{ $alert.Labels.severity }}\n\u544a\u8b66\u7c7b\u578b\uff1a{{ $alert.Labels.alertname }}\n\u544a\u8b66\u5e94\u7528\uff1a{{ $alert.Annotations.summary }}\n\u544a\u8b66\u4e3b\u673a\uff1a{{ $alert.Labels.instance }}\n\u544a\u8b66\u8be6\u60c5\uff1a{{ $alert.Annotations.description }}\n\u89e6\u53d1\u9600\u503c\uff1a{{ $alert.Annotations.value }}\n\u89e6\u53d1\u65f6\u95f4: {{ ($alert.StartsAt.Add 28800e9).Format \"2006-01-02 15:04:05\" }}\n\u6062\u590d\u65f6\u95f4: {{ ($alert.EndsAt.Add 28800e9).Format \"2006-01-02 15:04:05\" }}\n==========  end  ========== \n{{ end }} \n{{ end }}\n<\/code><\/pre>\n<\/li>\n<li>\u4f7f\u7528 &#8220;supervisorctl update&#8221; \u547d\u4ee4\u4f7f\u521a\u521a\u6dfb\u52a0\u7684\u914d\u7f6e\u6587\u4ef6\u751f\u6548, \u4f7f\u7528&#8221;supervisorctl  status&#8221; \u67e5\u770b alertmanager \u662f\u5426\u542f\u52a8\u6210\u529f<\/li>\n<li>\u7f16\u8f91 &#8220;\/opt\/monitor\/prometheus\/prometheus.yml&#8221; \u6587\u4ef6\uff0c\u6dfb\u52a0\u5185\u5bb9\uff0c\u5982\u4e0b\u6240\u793a:\n<pre><code class=\"\"># my global config\nglobal:\n  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.\n  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.\n  # scrape_timeout is set to the global default (10s).\n\n# Alertmanager configuration\nalerting:\n  alertmanagers:\n    - static_configs:\n        - targets: ['192.168.19.94:9993']\n\n# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.\nrule_files:\n  - \"rules\/*.yml\"\n  # - \"first_rules.yml\"\n  # - \"second_rules.yml\"\n\n# A scrape configuration containing exactly one endpoint to scrape:\n# Here it's Prometheus itself.\nscrape_configs:\n  # The job name is added as a label `job=&lt;job_name&gt;` to any timeseries scraped from this config.\n  - job_name: \"prometheus\"\n\n    # metrics_path defaults to '\/metrics'\n    # scheme defaults to 'http'.\n\n    static_configs:\n      - targets: [\"192.168.19.69:9090\"]\n\n  - job_name: '69_node_exporter'\n    scrape_interval: 5s\n    scheme: http\n    basic_auth:\n      username: prometheus\n      password: your_password # \u8fd9\u513f\u7684\u5bc6\u7801\u5c31\u662f node_export \u8bbe\u7f6e\u7684\u5bc6\u7801\n    static_configs:\n    - targets: ['192.168.19.69:9111']\n      labels:\n        instance: 19.168.19.69\n<\/code><\/pre>\n<\/li>\n<li>\u201cmkdir -p \/opt\/monitor\/prometheus\/rules \u201d , \u5e76\u521b\u5efa\u4e09\u4e2a\u6587\u4ef6\uff0c\u5206\u522b\u4e3a\u201cdist.yml  mem.yml  unreachable.yml\u201d \u8fd9\u4e09\u4e2a\u6587\u4ef6\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff0c \u91cc\u9762\u5b9a\u4e49\u4e86\u62a5\u8b66\u7684\u89c4\u5219\uff0c\u4e09\u4e2a\u6587\u4ef6\u91cc\u9762\u7684\u5185\u5bb9\u5982\u4e0b\uff1a\n<ul>\n<li>dist.yml \u7684\u5185\u5bb9\u5982\u4e0b\n<pre><code class=\"language-d \">groups:\n- name: root_dist_error\n  rules:\n  - alert: \"\u786c\u76d8\u62a5\u8b66\"\n    expr: 100 - (node_filesystem_avail_bytes{device=\"rootfs\",fstype=\"rootfs\",mountpoint=\"\/\"} \/ node_filesystem_size_bytes{device=\"rootfs\",fstype=\"rootfs\",mountpoint=\"\/\"}) * 100 &gt; 80\n    for: 60s\n    labels:\n      severity: error \n      team: testteam\n    annotations:\n      summary: \"root disk used is large\"\n      description: \"\u6839\u76ee\u5f55\u4f7f\u7528\u7387\u5927\u4e8e80%\"\n      value: \"{{ humanize $value }}%\"\n<\/code><\/pre>\n<\/li>\n<li>mem.yml \u7684\u5185\u5bb9\u5982\u4e0b\uff1a\n<pre><code class=\"\">groups:\n  - name: error_mem\n    rules:\n    - alert: \"memory error\"\n      expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) \/ node_memory_MemTotal_bytes * 100 &gt; 85\n      for: 20s\n      labels:\n        severity: error \n        team: testteam\n      annotations:\n        summary: \"Memory Usage is busy\"\n        description: \"memory usage is lager 80%\"\n        value: \"{{ humanize $value }}%\"\n<\/code><\/pre>\n<\/li>\n<li>unreachable.yml \u7684\u5185\u5bb9\u5982\u4e0b\uff1a\n<pre><code class=\"\">groups: \n  - name: InstanceDown #\u540c\u6027\u8d28\u7684\u4e00\u7ec4\u62a5\u8b66\uff0c\u76d1\u63a7\u5f53\u524d\u8282\u70b9\u7684\u6307\u6807\u7684\u7ec4\u540d\u79f0\n    rules:\n    - alert: InstanceDown\n      expr: up == 0 #\u6bcf\u4e00\u4e2a\u5b9e\u4f8b\u90fd\u4f1a\u6709\u4e00\u4e2aup\u7684\u72b6\u6001\uff0cup\u662f\u9ed8\u8ba4\u8d4b\u4e88\u88ab\u76d1\u63a7\u7aef\u7684\u4e00\u4e2a\u6307\u6807\uff0c0\u4e3a\u5931\u8d25\u72b6\u6001\uff0c1\u4e3a\u5b58\u6d3b\u72b6\u6001\n      for: 20m #\u5f53\u524d\u62a5\u8b66\u7684\u6301\u7eed\u65f6\u95f4\uff0c1\u5206\u949f\u4e4b\u5185\u5982\u679c\u90fd\u662fup == 0\u7684\u72b6\u6001\uff0c\u624d\u4f1a\u53d1\u51fa\u62a5\u8b66\n      labels: #\u8bbe\u7f6e\u62a5\u8b66\u7ea7\u522b\n        severity: error #\u62a5\u8b66\u7ea7\u522b\u4e3aerror\u7ea7\u522b\n      annotations: #\u6ce8\u91ca\u4fe1\u606f\n        summary: \"Instance {{ $labels.instance }} is down\"\n        description: \"{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 10 minutes.\"\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u7136\u540e\u4f7f\u7528 \u201dsupervisorctl  restart prometheus\u201c \u91cd\u542f premetheus \uff0c\u4f7f\u6539\u52a8\u751f\u6548<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>prometheus \u642d\u5efa \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u4e0b\u8f7d prometheus, \u5e76\u505a\u89e3\u538b\u7b49\u52a8\u4f5c mkdir -p \/op [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[32],"class_list":["post-776","post","type-post","status-publish","format-standard","hentry","category-jiankong","tag-32"],"_links":{"self":[{"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/posts\/776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=776"}],"version-history":[{"count":16,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/posts\/776\/revisions"}],"predecessor-version":[{"id":792,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=\/wp\/v2\/posts\/776\/revisions\/792"}],"wp:attachment":[{"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aiqinqin.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}