Prometheus + Grafana (1) 監(jiān)控

簡介

Micrometer/Prometheus/Grafana體系是當(dāng)前最成熟的低成本Java監(jiān)控解決方案政模,而且通過其他的Prometheus exporter,還可以進(jìn)行諸如我們可能需要的Windows操作系統(tǒng)監(jiān)控/Mysql/Kakfka等常用組件的監(jiān)控热某、

Prometheus

Prometheus(普羅米修斯)是一套比較完備的監(jiān)控報(bào)警系統(tǒng),其主要架構(gòu)設(shè)計(jì)如圖:

image

主要是由以下組件構(gòu)成:

  • Prometheus server:服務(wù)中心,主要負(fù)責(zé)拉取和存儲(chǔ)時(shí)序書庫(Prometheus有自帶的時(shí)序數(shù)據(jù)庫)
  • Client Libraries:客戶端庫昔馋,主要用于和具體的服務(wù)進(jìn)行集成筹吐,采集監(jiān)控?cái)?shù)據(jù),例如Micrometer
  • Push gateway:另外一種數(shù)據(jù)push的采集方式(Prometheus默認(rèn)使用pull的方式主動(dòng)采集應(yīng)用數(shù)據(jù))秘遏,用于適配一些沒有長期穩(wěn)定的進(jìn)程的服務(wù)
  • Exporter:用于針對(duì)某些特定服務(wù)的數(shù)據(jù)采集工具丘薛,例如mysql/kafka/HA等
  • Alert Manager:Prometheus的監(jiān)控告警工具,主要通過webhook和其他告警系統(tǒng)進(jìn)行集成告警邦危,能夠進(jìn)行告警規(guī)則的配置
  • 其他工具

同時(shí)洋侨,Prometheus也有一套自己的查詢語法,用于已經(jīng)采集的數(shù)據(jù)的結(jié)果查詢倦蚪,具體可以參考:
https://prometheus.io/docs/prometheus/latest/querying/basics/

或者中文翻譯: http://www.reibang.com/p/3bdc4cfa08da

Micrometer

Micrometer是Java的指標(biāo)監(jiān)控工具希坚,而且建立了一套獨(dú)立的數(shù)據(jù)模型,能夠和大部分常見的監(jiān)控工具進(jìn)行整合审丘,簡單快速的建立指標(biāo)監(jiān)控體系

Micrometer提供了包括Timer , Counter , Gauge ,
DistributionSummary , LongTaskTimer , FunctionCounter , FunctionTimer , TimeGauge等不同的監(jiān)控工具吏够,以適應(yīng)不同的場景,例如Timer用于監(jiān)控一個(gè)操作的消耗時(shí)間滩报,并能在這個(gè)基礎(chǔ)上統(tǒng)計(jì)例如minx/max/avg/tp等指標(biāo)

Grafana

Grafana是一個(gè)開源的度量分析與可視化套件锅知。經(jīng)常被用作基礎(chǔ)設(shè)施的時(shí)間序列數(shù)據(jù)和應(yīng)用程序分析的可視化,它在其他領(lǐng)域也被廣泛的使用包括工業(yè)傳感器脓钾、家庭自動(dòng)化售睹、天氣和過程控制等。

Grafana支持許多不同的數(shù)據(jù)源可训。每個(gè)數(shù)據(jù)源都有一個(gè)特定的查詢編輯器,該編輯器定制的特性和功能是公開的特定數(shù)據(jù)來源昌妹。

其工作模式主要分為三步:

  • 設(shè)置數(shù)據(jù)源:可視化的基礎(chǔ)數(shù)據(jù)來源,例如從數(shù)據(jù)庫/Prometheus/ElasticSearch
  • 配置數(shù)據(jù)抽取方式:例如通過數(shù)據(jù)庫的SQL/Prometheus的ProQuery等進(jìn)行數(shù)據(jù)查詢
  • 數(shù)據(jù)面板配置:Grafana支持多樣的數(shù)據(jù)呈現(xiàn)方式握截,例如折線圖/直方圖/熱力圖等等飞崖,通過簡單的配置,即可通過多樣化的數(shù)據(jù)呈現(xiàn)方式去展示監(jiān)控?cái)?shù)據(jù)

使用流程

Prometheus部署

寫在前面:默認(rèn)的訪問地址 http://127.0.0.1:9090

PS: 下方有docker方式部署

開源的Prometheus是單節(jié)點(diǎn)模式谨胞,部署非常簡單固歪,這里以Windows下為例,首先在Prometheus官方下載文件包胯努,例如當(dāng)前最新的Windows64版本為:
https://github.com/prometheus/prometheus

下載完畢后解壓其目錄結(jié)構(gòu)如下:

image

data為Prometheus是自帶時(shí)序數(shù)據(jù)庫持久化的目錄牢裳,pometheus.yml為整個(gè)Prometheus的配置文件,pometheus.exe為服務(wù)啟動(dòng)應(yīng)用叶沛,默認(rèn)可以直接啟動(dòng)蒲讯,這個(gè)時(shí)候Prometheus會(huì)使用最基本的默認(rèn)配置,運(yùn)行在本地9090端口灰署,采集自身的運(yùn)行的數(shù)據(jù)并持久化到時(shí)序數(shù)據(jù)

prometheus.yml的配置規(guī)則參考文檔:

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

當(dāng)Prometheus啟動(dòng)完畢后判帮,本地瀏覽器訪問
http://127.0.0.1:9090即可查看到Prometheus的查詢工具

值得注意的是局嘁,如果要啟用restful接口支持熱加載配置,需要在啟動(dòng)的命令行增加參數(shù): --web.enable-lifecycle ,這在生產(chǎn)環(huán)境中不停機(jī)更新非常重要

例如:cmd下執(zhí)行:prometheus.exe --web.enable-lifecycle

CentOS下安裝

wget https://github.com/prometheus/prometheus/releases/download/v2.22.0/prometheus-2.22.0.linux-amd64.tar.gz

tar -zxvf prometheus-2.5.0.linux-amd64.tar.gz

// --config.file="prometheus/prometheus.yml": 指定配置文件脊另,不寫為默認(rèn)
nohup /dimples/soft/prometheus-2.22.0/prometheus --config.file="/dimples/soft/prometheus-2.22.0/prometheus.yml" &

// 關(guān)閉
ps -aux | grep prometheus
kill -s 9 24204(上一步查詢出來的pid)
image

查看Prometheus監(jiān)控的應(yīng)用(Prometheus啟動(dòng)時(shí)导狡,默認(rèn)監(jiān)控的是自己)

image

此時(shí)我們可以看到,在Prometheus中只有一個(gè)自己的服務(wù)被監(jiān)控了偎痛,那么我們?cè)趺慈⒆约旱姆?wù)加入監(jiān)控呢?請(qǐng)往下看独郎。

Grafana部署

寫在前面:默認(rèn)的訪問地址 http://127.0.0.1:3000/login

Grafana的部署和Prometheus的部署類似踩麦,也非常簡單,這里也以Windows為例氓癌,首先需要從官方網(wǎng)站下載最新的安裝包:

https://grafana.com/grafana/download

這里以zip包為例谓谦,解壓后目錄結(jié)構(gòu)為:

image

配置文件路徑為 conf/defaults.ini,這里可以修改默認(rèn)端口贪婉,配置持久化方式反粥,默認(rèn)用戶名和密碼

啟動(dòng)執(zhí)行文件為 bin/grafana-server.exe,雙擊即可啟動(dòng)疲迂。(默認(rèn)端口為3000才顿,默認(rèn)用戶名和密碼均為admin)

啟動(dòng)后瀏覽器訪問即可登錄使用,http://127.0.0.1:3000/login 第一次使用會(huì)強(qiáng)制修改密碼

image

CentOS下安裝

wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm
yum install -y grafana-6.4.4-1.x86_64.rpm
yum clean all

// 安裝后需要手動(dòng)啟動(dòng)
service grafana-server start

service grafana-server stop
  • 配置文件位于/etc/grafana/grafana.ini尤蒿,這里暫時(shí)保持默認(rèn)配置即可
  • 設(shè)置開機(jī)啟動(dòng)
systemctl enable grafana-server
systemctl start grafana-server

配置第一個(gè)監(jiān)控面板 - Prometheus

當(dāng)Prometheus和Grafana部署完成之后郑气,默認(rèn)Prometheus就已經(jīng)在開始采集自身的監(jiān)控?cái)?shù)據(jù),所以我們就可以開始配置Prometheus的監(jiān)控界面腰池,首先需要登錄Grafana尾组,在左側(cè)的設(shè)置界面配置數(shù)據(jù)源:

image

點(diǎn)擊 Add data source添加第一個(gè)數(shù)據(jù)源,由于我們這里主要是以Prometheus作為數(shù)據(jù)源示弓,所以直接選擇Prometheus即可:

image
image

Name為這個(gè)數(shù)據(jù)源的別稱讳侨,用于在多個(gè)數(shù)據(jù)源的時(shí)候進(jìn)行區(qū)分,url為Prometheus的restful接口地址奏属,例如這里就為剛剛部署完畢的本地Prometheus服務(wù)跨跨,最后點(diǎn)擊最下的Save&Test即可添加成功,然后點(diǎn)擊back返回上一步即可查看到已經(jīng)添加的數(shù)據(jù)源:

image

添加完畢數(shù)據(jù)源之后拍皮,則可以開始進(jìn)行監(jiān)控面板的設(shè)計(jì)了歹叮,這里考慮到監(jiān)控面板設(shè)計(jì)有一定的門檻,所以建議直接使用官方提供的監(jiān)控面板模板铆帽,具體可以從官方的模板倉庫下載:https://grafana.com/grafana/dashboards

例如我們這里需要進(jìn)行Prometheus本身的監(jiān)控咆耿,我們搜索 Prometheus stat:

image

此處可以選擇編號(hào) 1 的編號(hào)導(dǎo)入或者使用編號(hào) 2 ,下載JSON文件使用爹橱,此處我們使用下載json文件的方式

image

下載完畢之后萨螺,則可以導(dǎo)入到Grafana:

image

配置panel,有三種方式(編號(hào) 1、2慰技、3 任選一種):上傳JOSN文件椭盏、填寫ID(然后點(diǎn)擊Load)、填寫JSON配置內(nèi)容(然后點(diǎn)擊Load)吻商,此處我們選擇方便的填寫ID的方式掏颊,然后點(diǎn)擊對(duì)應(yīng)框后的Load按鈕進(jìn)入下一步

image

點(diǎn)擊import之前需要配置別名和選擇一個(gè)數(shù)據(jù)源,所以在import之前必須至少配置一個(gè)數(shù)據(jù)源艾帐,點(diǎn)擊import后即可看到監(jiān)控窗口

image
image

到此乌叶,我們已經(jīng)學(xué)會(huì)了啟動(dòng)Grafana和Prometheus,同時(shí)學(xué)會(huì)了配置一個(gè)簡單的監(jiān)控服務(wù)柒爸,即監(jiān)控Prometheus本身准浴。我們已經(jīng)了解到其工作的一個(gè)基礎(chǔ)的流程,以后我們就要去配置監(jiān)控 Java服務(wù)捎稚、MySQL乐横、Redis數(shù)據(jù)庫等各種復(fù)雜的服務(wù)

監(jiān)控第一個(gè)Java程序

在上面?zhèn)兒唵蔚膶rometheus采集的對(duì)于自身的數(shù)據(jù)通過Grafana進(jìn)行了展示,而我們的核心是通過Prometheus去采集Java應(yīng)用的數(shù)據(jù)今野,這就需要針對(duì)前面提到的通過Prometheus的pull模式定時(shí)去拉取SpringBoot通過Actuator暴露的Micrometer采集的監(jiān)控指標(biāo)

  • 首先需要的做的是完成Java應(yīng)用的Micrometer集成葡公,訪問actuator/prometheus或者/prometheus能夠正常的返回Micrometer采集的數(shù)據(jù)指標(biāo)
  • 進(jìn)入部署Prometheus的文件目錄,打prometheus.yml進(jìn)行拉取節(jié)點(diǎn)的配置腥泥,這里以我自己部署的java應(yīng)用為例匾南,在配置文件的scrape_configs節(jié)點(diǎn)添加針對(duì)java的配置

SpringBoot 集成Micrometer

Micrometer的集成主要依托于SpringBoot的Actuator,Micrometer會(huì)默認(rèn)采集JVM以及一些其他常用組件(例如HikariCP/Http/Tomcat/Logback)的各項(xiàng)指標(biāo)蛔外,然后通過Actuator輸出蛆楞,供Prometheus pull進(jìn)行數(shù)據(jù)采集

由于歷史的原因,Micrometer的Java集成和SpringBoot版本有關(guān)

SpringBoot 2.x

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

激活配置:

management.endpoints.web.exposure.include=prometheus,health
management.metrics.tags.application=${spring.application.name}
spring.application.name= demo-project

SpringBoot 1.5.x

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-spring-legacy</artifactId>
    <version>1.0.3</version>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.0.3</version>
</dependency>

必須配置:

spring.application.name=dimples-demo-project
management.security.enabled=false
spring.metrics.export.includes=health,prometheus

公共配置

@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags(@Value("${spring.application.name}") String application) {
    return registry -> registry.config().commonTags("application", application);
}

激活后啟動(dòng)程序夹厌,通過IDEA查看是否已經(jīng)包含/actuator/prometheus端點(diǎn):

image

訪問

http://{hostname}:{port}/actuator/prometheus (2.x)

或者 http://{hostname}:{port}/prometheus (1.5.x)

image

配置 Prometheus 監(jiān)控

打開 Prometheus 的 prometheus.yml 文件,這里我們配置一個(gè)Java服務(wù)

global:
  scrape_interval:     15s 
  evaluation_interval: 15s 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'demo'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['127.0.0.1:8080']     # []表示數(shù)組豹爹,我們可以配置多個(gè)服務(wù)

修改配置并保存之后,通過Prometheus的restful接口熱加載配置:

http://localhost:9090/-/reload

請(qǐng)求接口后返回 Lifecycle API is not enabled. 那么就是啟動(dòng)的時(shí)候沒有開啟熱更新配置矛纹,需要在啟動(dòng)的命令行增加參數(shù): --web.enable-lifecycle

image

這里返回200表示執(zhí)行成功臂聋,否則會(huì)提示錯(cuò)誤信息(這里需要post/put請(qǐng)求,所以這里使用了postman來發(fā)起請(qǐng)求或南,如果Linux可以使用 curl -X POST http://localhost:9090/-/reload發(fā)起請(qǐng)求

更新指令執(zhí)行成功之后孩等,可以在web界面進(jìn)行確認(rèn):

image

如果想驗(yàn)證是否確實(shí)采集到數(shù)據(jù),可以返回首頁的查詢界面:

image

隨意選擇一個(gè)jvm指標(biāo)采够,點(diǎn)擊execute即可查詢對(duì)應(yīng)的指標(biāo)數(shù)據(jù):

image

可以看到對(duì)應(yīng)的指標(biāo)已經(jīng)有數(shù)據(jù)采集到肄方,然后我們則可以到grafana進(jìn)行監(jiān)控面板的配置,同樣我們先下載一個(gè)面板模板:

image

導(dǎo)入之后選擇之前配置的數(shù)據(jù)源之后即可看到監(jiān)控面板:

image
image

到此一個(gè)簡易的java監(jiān)控則已經(jīng)完成

配置服務(wù)器監(jiān)控

這里以監(jiān)控Java程序?yàn)槔虐P枰褂玫絎indows-exporter的插件來隊(duì)windows操作系統(tǒng)進(jìn)行數(shù)據(jù)采集权她,首先需要下載最新的exporter:

https://github.com/prometheus-community/windows_exporter/releases

例如我這里下載的是 https://github.com/prometheus-community/windows_exporter/releases/download/v0.14.0/windows_exporter-0.14.0-amd64.msi

安裝完畢后虹茶,瀏覽器訪問: http://localhost:9182/metrics 即可查看到采集的數(shù)據(jù)指標(biāo),在windows的服務(wù)中也能看到有windows_exporter啟動(dòng):

image

然后我們需要在Prometheus中配置采集節(jié)點(diǎn)隅要,參考Java的配置模式:

image

同樣的需要刷新加載 http://localhost:9090/-/reload

image

同樣選擇一個(gè)Grafana模板蝴罪,導(dǎo)入即可查看到具體的監(jiān)控信息:

image

本節(jié)只是簡單的整合 Prometheus + Grafana 在監(jiān)控Java服務(wù)方面的使用,但是在我們的微服務(wù)業(yè)務(wù)中步清,常常還有包括 MySQL要门、Redis、docker尼啡、微服務(wù)端點(diǎn)等應(yīng)用暂衡,同時(shí)應(yīng)用發(fā)生異常時(shí),還需要發(fā)送預(yù)警短信或者郵件崖瞭。那么這些功能如何實(shí)現(xiàn)呢?請(qǐng)繼續(xù)閱讀第二章 -《Prometheus + Grafana (2) mysql撑毛、redis书聚、Docker容器、服務(wù)端點(diǎn)以及預(yù)警》藻雌。


附錄 - 自定義監(jiān)控面板

Grafana提供不同樣式的基礎(chǔ)數(shù)據(jù)層呈現(xiàn)樣式雌续,大多數(shù)情況下默認(rèn)的模板即可滿足我們的日常需求,如果我們需要進(jìn)行自定義的面板設(shè)計(jì)胯杭,也可以非常簡單的完成的目標(biāo)驯杜,這里建議從已經(jīng)存在的模板做參考開始,例如JVM的監(jiān)控面板做个,隨機(jī)找一個(gè)面板:

image

選擇edit即可以查看是如何配置才能達(dá)到當(dāng)前的效果:

image

需要配置的內(nèi)容有:

  • 數(shù)據(jù)源鸽心,例如這里選擇的是Prometheus
  • Metrics:查詢表達(dá)式,例如這里是Prometheus的表達(dá)式居暖,如果是用數(shù)據(jù)庫做數(shù)據(jù)源顽频,這里應(yīng)該是SQL
  • Legend:數(shù)據(jù)標(biāo)題,這里可以用表達(dá)式類似{{name}}這樣的格式
  • Visualization:可視化樣式太闺,這里是Graph糯景,也就是折線圖,也可以選擇其他的樣例其他的一些配置可以自己多嘗試看看效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末省骂,一起剝皮案震驚了整個(gè)濱河市蟀淮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钞澳,老刑警劉巖怠惶,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異略贮,居然都是意外死亡甚疟,警方通過查閱死者的電腦和手機(jī)仗岖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來览妖,“玉大人轧拄,你說我怎么就攤上這事》砀啵” “怎么了檩电?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長府树。 經(jīng)常有香客問我俐末,道長,這世上最難降的妖魔是什么奄侠? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任卓箫,我火速辦了婚禮,結(jié)果婚禮上垄潮,老公的妹妹穿的比我還像新娘烹卒。我一直安慰自己,他們只是感情好弯洗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布旅急。 她就那樣靜靜地躺著,像睡著了一般牡整。 火紅的嫁衣襯著肌膚如雪藐吮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天逃贝,我揣著相機(jī)與錄音谣辞,去河邊找鬼。 笑死秋泳,一個(gè)胖子當(dāng)著我的面吹牛潦闲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迫皱,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歉闰,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了卓起?” 一聲冷哼從身側(cè)響起和敬,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戏阅,沒想到半個(gè)月后昼弟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奕筐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年舱痘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了变骡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芭逝,死狀恐怖塌碌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旬盯,我是刑警寧澤台妆,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站胖翰,受9級(jí)特大地震影響接剩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萨咳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一懊缺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧培他,春花似錦桐汤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽员萍。三九已至腾降,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碎绎,已是汗流浹背螃壤。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筋帖,地道東北人奸晴。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像日麸,于是被迫代替她去往敵國和親寄啼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容