国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Nginx監(jiān)控安裝:Filebeat+ES+Grafana(全)

這篇具有很好參考價(jià)值的文章主要介紹了Nginx監(jiān)控安裝:Filebeat+ES+Grafana(全)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

’ $remote_user’

’ [$time_local]’

’ “$request”’

’ $status’

’ $body_bytes_sent’

’ “$http_referer”’

’ “$http_user_agent”’

’ “$http_x_forwarded_for”’

’ $upstream_response_time’

’ $upstream_addr’;

access_log logs/access.log main;

upstream gateway_pool {

網(wǎng)關(guān)的地址

server 106.12.129.14:9200;

}

server {

listen 80;

#this line shoud be include in every server block

include /app/openresty/nginx/waf/verynginx/verynginx/nginx_conf/in_server_block.conf;

#include /app/openresty/nginx/waf/verynginx/nginx_conf/in_http_block.conf;

location / {

proxy_http_version 1.1;

proxy_set_header Connection “”;

proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Host $host;

proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

proxy_set_header Host $host;

proxy_pass http://gateway_pool;

}

}

}

#---------------VeryNginx config code end-----------------

如果不使用 VeryNginx 提供的配置模版,你也可以手動(dòng)把這部分加入到自己的 Nginx 配置文件中. (如果安裝路徑不是/app/openresty ,需要對(duì) lua_package_cpath 和 lua_package_path 的值進(jìn)行修改)

1.4 啟/停服務(wù)

啟動(dòng)服務(wù): /app/openresty/nginx/sbin/nginx

停止服務(wù):/app/openresty/nginx/sbin/nginx -s stop

1.5 配置VeryNginx

打開瀏覽器訪問 http://127.0.0.1/VeryNginx/dashboard/index.html

默認(rèn)用戶名和密碼:verynginx / verynginx 。

登錄之后就可以查看狀態(tài),并對(duì)配置進(jìn)行修改了。修改配置后,記得到 「配置 > 系統(tǒng) > 全部配置」去保存.

提示

  • 通過 VeryNginx 控制面板保存新配置之后,會(huì)立刻生效,并不需要 restart/reload Nginx。

  • VeryNginx 把配置保存在 /app/openresty/nginx/waf/verynginx/configs/config.json 里面。

  • 如果因?yàn)榕溴e(cuò)了什么選項(xiàng),導(dǎo)致無法登錄,可以手動(dòng)刪除 config.json 來清空配置。

已安裝成功openresty

可以用網(wǎng)盤的覆蓋/app/openresty/nginx/waf目錄

鏈接:https://pan.baidu.com/s/1nt2SfrDtk83Q4gvwIlpBfQ 提取碼:g5hs

2. 安裝elasticsearch


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz

tar -zxvf elasticsearch-6.5.4.tar.gz -C /usr/local/

useradd es

chown -R es:es /usr/local/elasticsearch-6.5.4/

cd /usr/local/elasticsearch-6.5.4

修改config/jvm.options為內(nèi)存的一半大小

vi config/jvm.options

-Xms512m

-Xmx512m

修改 max file 和 max virtual memory 參數(shù)

用root 或 sudo 用戶

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并執(zhí)行命令:

sysctl -p

配置端口 跨域

vi /usr/local/elasticsearch-6.5.4/config/elasticsearch.yml

cluster.name: elasticsearch

node.name: node-1

network.host: 0.0.0.0

http.port: 9200

node.max_local_storage_nodes: 2

http.cors.enabled: true

http.cors.allow-origin: “*”

切換es用戶

su - es

在Elasticsearch主目錄下運(yùn)行下列命令來安裝這些插件:

bin/elasticsearch-plugin install ingest-geoip

bin/elasticsearch-plugin install ingest-user-agent

es用戶啟動(dòng)

/usr/local/elasticsearch-6.5.4/bin/elasticsearch -d

root用戶啟動(dòng)

su - es -c ‘/usr/local/elasticsearch-6.5.4/bin/elasticsearch -d’

2.1 windows 安裝elasticseach-head

  • 訪問 https://github.com/mobz/elasticsearch-head 下載 head 插件(選擇 zip 壓縮包下載方式)。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

  • 修改 ~\elasticsearch-6.6.2\elasticsearch-head-master\Gruntfile.js,在對(duì)應(yīng)的位置加上 hostname:’*’ 配置項(xiàng)。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

  • 在 ~\elasticsearch-6.6.2\elasticsearch-head-master 下執(zhí)行 npm install 開始安裝,完成后可執(zhí)行 grunt server 或者 npm run start 運(yùn)行 head 插件。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

  • 安裝成功,訪問 http://localhost:9100/。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

2.2 注意事項(xiàng)

  • 在 head 中連接 ES 失敗。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

對(duì)于 Access-Control-Allow-Origin 的問題,可以在 ElasticSearch 6.x 的 ~\config\elasticsearch.yml 文件的末尾加入以下代碼:

http.cors.enabled: true

http.cors.allow-origin: “*”

node.master: true node.data: true

配置更新后,重啟 ES 即可連接成功。

3. 安裝Filebeat


推薦博客:https://www.cnblogs.com/cjsblog/p/9495024.html

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz

tar -zxvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local/

mv filebeat-6.5.4-linux-x86_64 filebeat-6.5.4

cd /usr/local/filebeat-6.5.4

vi filebeat.yml

filebeat.inputs:

  • type: log

enabled: false

paths:

  • /app/openresty/nginx/logs/access.log

#============================= Filebeat modules ===============================

filebeat.config.modules:

path: ${path.config}/modules.d/*.yml

reload.enabled: false

setup.template.settings:

index.number_of_shards: 3

setup.template.name: “nginx-log-”

setup.template.pattern: “nginx-log-*”

setup.template.overwrite: true

output.elasticsearch:

enabled: true

hosts: [“106.13.3.200:9200”]

index: “nginx-log-%{+yyyy-MM-dd}”

#================================ Processors =====================================

Configure processors to enhance or manipulate events generated by the beat.

processors:

#- add_host_metadata: ~

#- add_cloud_metadata: ~

  • drop_fields:

fields: [“beat.name”, “beat.version”, “host.architecture”,“host.architecture”,“host.name”,“beat.hostname”,“l(fā)og.file.path”]

3.1 啟用模塊nginx

cd /usr/local/filebeat-6.5.4/modules.d

vi nginx.yml

執(zhí)行以下配置

  • module: nginx

Access logs

access:

enabled: true

Set custom paths for the log files. If left empty,

Filebeat will choose the paths depending on your OS.

var.paths: [“/app/openresty/nginx/logs/access.log”]

Error logs

error:

enabled: true

Set custom paths for the log files. If left empty,

Filebeat will choose the paths depending on your OS.

var.paths: [“/app/openresty/nginx/logs/error.log”]

3.2 配置 default.json

cd /usr/local/filebeat-6.5.4/module/nginx/access/ingest

vi default.json

{

“description”: “Pipeline for parsing Nginx access logs. Requires the geoip and user_agent plugins.”,

“processors”: [{

“grok”: {

“field”: “message”,

“patterns”:[

“”?%{IP_LIST:nginx.access.remote_ip_list} - %{DATA:nginx.access.user_name} \[%{HTTPDATE:nginx.access.time}\] “%{GREEDYDATA:nginx.access.info}” %{NUMBER:nginx.access.response_code} %{NUMBER:nginx.access.body_sent.bytes} “%{DATA:nginx.access.referrer}” “%{DATA:nginx.access.agent}” “%{GREEDYDATA:nginx.access.xforwardedfor}” %{GREEDYDATA:nginx.access.upstream_response_time} %{GREEDYDATA:nginx.access.upstream_addr}"

],

“pattern_definitions”: {

“IP_LIST”: “%{IP}(”?,?\s*%{IP})*"

},

“ignore_missing”: true

}

}, {

“grok”: {

“field”: “nginx.access.info”,

“patterns”: [

“%{WORD:nginx.access.method} %{DATA:nginx.access.url} HTTP/%{NUMBER:nginx.access.http_version}”,

“”

],

“ignore_missing”: true

}

}, {

“remove”: {

“field”: “nginx.access.info”

}

}, {

“split”: {

“field”: “nginx.access.remote_ip_list”,

“separator”: “”?,?\s+"

}

}, {

“script”: {

“l(fā)ang”: “painless”,

“inline”: “boolean isPrivate(def ip) { try { StringTokenizer tok = new StringTokenizer(ip, ‘.’); int firstByte = Integer.parseInt(tok.nextToken()); int secondByte = Integer.parseInt(tok.nextToken()); if (firstByte == 10) { return true; } if (firstByte == 192 && secondByte == 168) { return true; } if (firstByte == 172 && secondByte >= 16 && secondByte <= 31) { return true; } if (firstByte == 127) { return true; } return false; } catch (Exception e) { return false; } } def found = false; for (def item : ctx.nginx.access.remote_ip_list) { if (!isPrivate(item)) { ctx.nginx.access.remote_ip = item; found = true; break; } } if (!found) { ctx.nginx.access.remote_ip = ctx.nginx.access.remote_ip_list[0]; }”

}

}, {

“remove”:{

“field”: “message”

}

}, {

“rename”: {

“field”: “@timestamp”,

“target_field”: “read_timestamp”

}

}, {

“date”: {

“field”: “nginx.access.time”,

“target_field”: “@timestamp”,

“formats”: [“dd/MMM/YYYY:H??s Z”]

}

},{

“remove”: {

“field”: “nginx.access.time”

}

}, {

“user_agent”: {

“field”: “nginx.access.agent”,

“target_field”: “nginx.access.user_agent”

}

}, {

“rename”: {

“field”: “nginx.access.agent”,

“target_field”: “nginx.access.user_agent.original”

}

}, {

“geoip”: {

“field”: “nginx.access.remote_ip”,

“target_field”: “nginx.access.geoip”

}

}, {

“script”: {

“l(fā)ang”: “painless”,

“inline”: “String tmp=ctx.nginx.access.upstream_response_time; if (tmp==‘-’){ctx.nginx.access.upstream_response_time=-1.0}else{ctx.nginx.access.upstream_response_time=Float.parseFloat(tmp)}”

}

}],

“on_failure” : [{

“set” : {

“field” : “error.message”,

“value” : “{{ _ingest.on_failure_message }}”

}

}]

}

cd /usr/local/filebeat-6.5.4

nohup ./filebeat -e -c filebeat.yml >&/dev/null &

4. 安裝Grafana


自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。

深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識(shí)點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!

如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/strong>

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

最后

我還通過一些渠道整理了一些大廠真實(shí)面試主要有:螞蟻金服、拼多多、阿里云、百度、唯品會(huì)、攜程、豐巢科技、樂信、軟通動(dòng)力、OPPO、銀盛支付、中國平安等初,中級(jí),高級(jí)Java面試題集合,附帶超詳細(xì)答案,希望能幫助到大家。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

還有專門針對(duì)JVM、SPringBoot、SpringCloud、數(shù)據(jù)庫、Linux、緩存、消息中間件、源碼等相關(guān)面試題。

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》點(diǎn)擊傳送門即可獲??!
mg-19boGMyf-1711804720790)]

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識(shí)點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!

如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/strong>

/usr/share/filebeat/module/nginx/access/ingest,程序員,nginx,elasticsearch,grafana

最后

我還通過一些渠道整理了一些大廠真實(shí)面試主要有:螞蟻金服、拼多多、阿里云、百度、唯品會(huì)、攜程、豐巢科技、樂信、軟通動(dòng)力、OPPO、銀盛支付、中國平安等初,中級(jí),高級(jí)Java面試題集合,附帶超詳細(xì)答案,希望能幫助到大家。

[外鏈圖片轉(zhuǎn)存中…(img-GukxfK1l-1711804720791)]

還有專門針對(duì)JVM、SPringBoot、SpringCloud、數(shù)據(jù)庫、Linux、緩存、消息中間件、源碼等相關(guān)面試題。

[外鏈圖片轉(zhuǎn)存中…(img-Mmb1AHPY-1711804720791)]

《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》,點(diǎn)擊傳送門即可獲取!文章來源地址http://www.zghlxwxcb.cn/news/detail-851702.html

到了這里,關(guān)于Nginx監(jiān)控安裝:Filebeat+ES+Grafana(全)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • filebeat采集日志數(shù)據(jù)到kafka(一)(filebeat->kafka->logstash->es)

    filebeat采集日志數(shù)據(jù)到kafka(一)(filebeat->kafka->logstash->es)

    一、filebeat安裝 filebeat-kafka版本適配 1、安裝包下載 https://www.elastic.co/cn/downloads/past-releases#filebeat 解壓 2、新建yml配置文件,如test.yml 3、Filebeat啟動(dòng)和停止 啟動(dòng):./filebeat -c test.yml 停止:kill -9 PID

    2024年02月16日
    瀏覽(23)
  • filebeat kibana elasticsearch 日志監(jiān)控

    filebeat kibana elasticsearch 日志監(jiān)控

    解壓三個(gè)壓縮包 一、filebeat的安裝部署 1、打開filebeat的配置文件 2、Filebeat inputs 處打開日志輸入開關(guān),設(shè)置要監(jiān)控的路徑 ?3、Outputs 輸出中設(shè)置Elasticsearch output的輸出地址 4、配置kibana 的地址 5、執(zhí)行??./filebeat setup -e 二、Elasticsearch 安裝部署 1、修改配置文件? 2、添加如下內(nèi)

    2024年02月14日
    瀏覽(19)
  • 使用Filebeat收集并分析nginx的訪問日志

    使用Filebeat收集并分析nginx的訪問日志

    之前我們已經(jīng)搞定了nginx+keepalived雙機(jī),花了一個(gè)多星期時(shí)間把業(yè)務(wù)都遷移過來之后,基本穩(wěn)定,中間還遇到一次意外宕機(jī),keepalived也順利做了主備切換,接下來就要做日志分析了。 日志分析,本身從等保的要求就是需要日志第三方存儲(chǔ)的,另外就是日志也是分析訪問量的一

    2024年02月02日
    瀏覽(23)
  • k8s部署elk+filebeat;springCloud集成elk+filebeat+kafka+zipkin實(shí)現(xiàn)多個(gè)服務(wù)日志鏈路追蹤聚合到es

    k8s部署elk+filebeat;springCloud集成elk+filebeat+kafka+zipkin實(shí)現(xiàn)多個(gè)服務(wù)日志鏈路追蹤聚合到es

    如今2023了,大多數(shù)javaweb架構(gòu)都是springboot微服務(wù),一個(gè)前端功能請(qǐng)求后臺(tái)可能是多個(gè)不同的服務(wù)共同協(xié)做完成的。例如用戶下單功能,js轉(zhuǎn)發(fā)到后臺(tái) 網(wǎng)關(guān)gateway服務(wù) ,然后到 鑒權(quán)spring-sercurity服務(wù) ,然后到 業(yè)務(wù)訂單服務(wù) ,然后到 支付服務(wù) ,后續(xù)還有發(fā)貨、客戶標(biāo)簽等等服務(wù)

    2024年02月16日
    瀏覽(26)
  • EFLK日志平臺(tái)(filebeat-->kafka-->logstash-->es-->kiabana)

    EFLK日志平臺(tái)(filebeat-->kafka-->logstash-->es-->kiabana)

    ELK平臺(tái)是一套完整的日志集中處理解決方案,將 ElasticSearch、Logstash 和 Kiabana 三個(gè)開源工具配合使用, 完成更強(qiáng)大的用戶對(duì)日志的查詢、排序、統(tǒng)計(jì)需求。 1. es安裝(單節(jié)點(diǎn)部署) 前提 安裝 2.es web 查看 瀏覽器訪問 http://esIP:9200 或者本地訪問curl ‘http://localhost:9200/?pretty’ 安

    2024年02月10日
    瀏覽(25)
  • 【微服務(wù)】日志搜集es+kibana+filebeat+redis+logstash(單機(jī))

    【微服務(wù)】日志搜集es+kibana+filebeat+redis+logstash(單機(jī))

    日志搜集系統(tǒng)搭建 基于7.17.16版本 ps: 項(xiàng)目是toB的,日志量不大 7.17.16版本。8.x版本需要JDK11 java8 elastic 軟件不能以root用戶啟動(dòng),需要?jiǎng)?chuàng)建用戶 redis elasticsearch kibana logstash filebeat 下載tar包,解壓即可 es部署 配置ES_JAVA_HOME 略 elasticsearch.yml 修改config/elasticsearch.yml中參數(shù) 系統(tǒng)參數(shù)

    2024年01月16日
    瀏覽(77)
  • filebeat 采集k8s 中nginx deployment 日志

    filebeat 采集k8s 中nginx deployment 日志

    一、背景 在k8s集群中,已經(jīng)部署了nginx應(yīng)用,需要使用elk來收集日志。 注意:elk并沒有放在k8s集群中,使用單獨(dú)的服務(wù)器進(jìn)行安裝。不推薦elk放在k8s集群中! 其中filebeat,使用DaemonSet方式部署,這樣就可以自動(dòng)收集了。 操作系統(tǒng):centos 7.6 k8s版本:1.18.1 ip地址:10.212.82.63 配

    2024年02月13日
    瀏覽(18)
  • ELK實(shí)例----使用filebeat收集tomcat日志到ES并利用kibana展示

    ELK實(shí)例----使用filebeat收集tomcat日志到ES并利用kibana展示

    節(jié)點(diǎn)名稱 節(jié)點(diǎn)名稱 ip地址 kibana kibana 10.0.0.100 elasticsearch elasticsearch 10.0.0.101 filebeat filebeat 10.0.0.102 elasticsearch、Kibana、metricbeat、filebeat版本要一致,如都是7.17.5版本 1.2.1 安裝elasticsearch CPU 2C 內(nèi)存4G或更多 1.2.2 安裝 Kibana 1.2.3 安裝metricbeat 1.2.3 安裝filebeat 1.2.4 安裝Nginx 1.2.5 安裝t

    2024年02月09日
    瀏覽(26)
  • docker filebeat 將日志多級(jí)目錄和多維json數(shù)據(jù)日志同步到es

    使用的時(shí)候先調(diào)試調(diào)試配置,調(diào)試成功在嘗試寫入es,如果es寫入失敗就是es賬戶.密碼/白名單.和index未創(chuàng)建的問題,細(xì)節(jié)可以留言 setup.template.priority 模板優(yōu)先級(jí) 調(diào)整這個(gè)可以配置一臺(tái)機(jī)器多個(gè)filebeat 容器啟動(dòng) 多級(jí)目錄日志和多維josn日志結(jié)構(gòu) 以docker形式啟動(dòng)filebeat filebeat?配置?

    2024年01月17日
    瀏覽(17)
  • 5、Elasticsearch7.6.1 filebeat介紹及收集kafka日志到es示例

    5、Elasticsearch7.6.1 filebeat介紹及收集kafka日志到es示例

    1、介紹lucene的功能以及建立索引、搜索單詞、搜索詞語和搜索句子四個(gè)示例實(shí)現(xiàn) 2、Elasticsearch7.6.1基本介紹、2種部署方式及驗(yàn)證、head插件安裝、分詞器安裝及驗(yàn)證 3、Elasticsearch7.6.1信息搜索示例(索引操作、數(shù)據(jù)操作-添加、刪除、導(dǎo)入等、數(shù)據(jù)搜索及分頁) 4、Elasticsearch7

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包