Solr包含一個(gè)開發(fā)人員API和工具,用于在Solr服務(wù)及其各個(gè)組件的整個(gè)生命周期中收集詳細(xì)的以性能為導(dǎo)向的度量標(biāo)準(zhǔn)。
在內(nèi)部,此功能使用 Dropwizard 度量 API,該API使用以下類別的度量工具來(lái)度量事件:
每個(gè)具有唯一名稱的相關(guān)度量標(biāo)準(zhǔn)都在度量注冊(cè)表中進(jìn)行管理。Solr維護(hù)了幾個(gè)這樣的注冊(cè)表,每個(gè)都對(duì)應(yīng)一個(gè)高級(jí)組,例如:jvm、jetty、node和core(參見下面的公制注冊(cè)表)。
對(duì)于每個(gè)組(或每個(gè)注冊(cè)表),可以有幾個(gè)reporter,這些reporter是負(fù)責(zé)從選定的注冊(cè)中心到外部系統(tǒng)的度量的通信的組件。目前實(shí)施的reporter支持通過(guò)JMX、Ganglia、Graphite和SLF4J發(fā)布指標(biāo)。
還有一個(gè)專門的/admin/metrics處理程序,可以查詢以報(bào)告所有或一個(gè)子集的當(dāng)前指標(biāo)從多個(gè)注冊(cè)。
Solr包含多個(gè)度量注冊(cè)表,它將相關(guān)的度量標(biāo)準(zhǔn)進(jìn)行分組。
度量標(biāo)準(zhǔn)從流程開始直到關(guān)閉時(shí),通過(guò)組件的所有生命周期進(jìn)行維護(hù)和累積 - 例如,通過(guò)可能的幾個(gè)加載,卸載或重命名操作來(lái)跟蹤特定SolrCore的度量標(biāo)準(zhǔn),并且僅在核心被明確刪除。但是,度量標(biāo)準(zhǔn)在進(jìn)程重新啟動(dòng)之間不會(huì)持久;重新啟動(dòng)Solr將放棄所有收集的度量值。
以下這些是收集的主要度量標(biāo)準(zhǔn)組:
此注冊(cè)表在solr.jvm中返回,并包含以下信息。使用Metrics API發(fā)出請(qǐng)求時(shí),您可以指定&group=jvm限制為僅限這些度量標(biāo)準(zhǔn)。
此注冊(cè)表在solr.node返回并包含以下信息。使用Metrics API發(fā)出請(qǐng)求時(shí),您可以指定&group=node限制為僅限這些度量標(biāo)準(zhǔn)。
Core (SolrCore) 注冊(cè)表包括solr.core.<collection>,每個(gè)核心一個(gè)。使用Metrics API發(fā)出請(qǐng)求時(shí),您可以指定&group=core限制為僅限這些度量標(biāo)準(zhǔn)。
此注冊(cè)表返回solr.jetty并包含以下信息。使用Metrics API發(fā)出請(qǐng)求時(shí),您可以指定&group=jetty限制為僅限這些度量標(biāo)準(zhǔn)。
未來(lái),將為分片領(lǐng)導(dǎo)者和集群節(jié)點(diǎn)添加度量,包括來(lái)自每個(gè)核心度量的聚合。
系統(tǒng)中可用的指標(biāo)可以在solr.xml通過(guò)修改<metrics>元素來(lái)定制。
Note:有關(guān)該Solr.xml文件的更多信息,在何處查找以及如何編輯, 請(qǐng)參閱“Solr.xml的格式”部分。
本部分的solr.xml允許您定義被認(rèn)為系統(tǒng)敏感的系統(tǒng)屬性,但是不應(yīng)通過(guò)Metrics API公開。
如果未定義此部分,將使用以下默認(rèn)配置來(lái)隱藏密碼和身份驗(yàn)證信息:
<metrics>
<hiddenSysProps>
<str>javax.net.ssl.keyStorePassword</str>
<str>javax.net.ssl.trustStorePassword</str>
<str>basicauth</str>
<str>zkDigestPassword</str>
<str>zkDigestReadonlyPassword</str>
</hiddenSysProps>
</metrics>
reporter使用Solr生成的度量數(shù)據(jù)。有關(guān)如何配置自定義reporter的詳細(xì)信息, 請(qǐng)參閱下面的reporter部分。
供應(yīng)商幫助Solr生成度量數(shù)據(jù)。solr.xml的<metrics><suppliers>部分允許您定義自己的度量標(biāo)準(zhǔn)實(shí)現(xiàn)并為其配置參數(shù)。
自定義度量標(biāo)準(zhǔn)供應(yīng)商的實(shí)現(xiàn)超出了本指南的范圍,但通過(guò)下面描述的元素,還可以使用默認(rèn)實(shí)現(xiàn)進(jìn)行其他自定義設(shè)置。
此元素定義計(jì)數(shù)器供應(yīng)商的實(shí)現(xiàn)和配置。默認(rèn)實(shí)現(xiàn)不支持任何配置。
該元素定義了Counter
供應(yīng)商的實(shí)現(xiàn)和配置。默認(rèn)實(shí)現(xiàn)不支持任何配置。
這個(gè)元素定義了一個(gè)Meter
供應(yīng)商的實(shí)現(xiàn)。默認(rèn)的實(shí)現(xiàn)支持一個(gè)額外的參數(shù):
用于計(jì)算EWMA速率的時(shí)鐘類型。支持的值是:
user
,默認(rèn)值,使用System.nanoTime()
cpu
,它使用當(dāng)前線程的CPU時(shí)間
這個(gè)元素定義了一個(gè)Histogram
供應(yīng)商的實(shí)現(xiàn)。這個(gè)元素也支持上面用meter
元素顯示的 clock 參數(shù),還有:
要使用的 Reservoir 實(shí)現(xiàn)的完全限定的類名稱。默認(rèn)值是com.codahale.metrics.ExponentiallyDecayingReservoir
,但是Solr使用的Codahale Metrics庫(kù)還有其他選項(xiàng)。在上述提到的限制內(nèi)支持以下參數(shù):
size
,存儲(chǔ)庫(kù)大小。默認(rèn)值是1028。
alpha
,衰變參數(shù)。默認(rèn)值是0.015。這只適用于ExponentiallyDecayingReservoir
。
window
,窗口的大小,以秒為單位,只對(duì)SlidingTimeWindowReservoir
有效。默認(rèn)值是300(5分鐘)。
這個(gè)元素定義了一個(gè)Timer
供應(yīng)商的實(shí)現(xiàn)。默認(rèn)實(shí)現(xiàn)支持上面描述的clock
和reservoir
參數(shù)。
作為solr.xml其中的一部分定義,它定義了這些自定義參數(shù)中的一些,下面定義了默認(rèn)的Meter表供應(yīng)商具有非默認(rèn)的clock,默認(rèn)Timer值與非默認(rèn)的庫(kù)一起使用:
<metrics>
<suppliers>
<meter>
<str name="clock">cpu</str>
</meter>
<timer>
<str name="reservoir">com.codahale.metrics.SlidingTimeWindowReservoir</str>
<long name="window">600</long>
</timer>
</suppliers>
</metrics>
reporter配置在<metrics><reporter>部分的solr.xml文件中指定,例如:
<solr>
<metrics>
<reporter name="graphite" group="node, jvm" class="org.apache.solr.metrics.reporters.SolrGraphiteReporter">
<str name="host">graphite-server</str>
<int name="port">9999</int>
<int name="period">60</int>
</reporter>
<reporter name="collection1Updates" registry="solr.core.collection1" class="org.apache.solr.metrics.reporters.SolrSlf4jReporter">
<int name="period">300</int>
<str name="prefix">example</str>
<str name="logger">updatesLogger</str>
<str name="filter">QUERYHANDLER./update</str>
</reporter>
</metrics>
...
</solr>
這個(gè)例子配置了兩個(gè)reporter:Graphite和SLF4J。請(qǐng)參閱下面有關(guān)如何配置reporter的更多細(xì)節(jié)。
reporter插件使用以下參數(shù):
此外,可以在嵌套元素中指定幾個(gè)特定于實(shí)現(xiàn)的初始化參數(shù)。SLF4J,Ganglia和Graphite reporter有一些共同點(diǎn):
reporter被實(shí)例化為他們被配置的每個(gè)組和注冊(cè)表,當(dāng)相應(yīng)的組件被初始化時(shí)(例如,在JVM啟動(dòng)或SolrCore加載)。
當(dāng)reporter被創(chuàng)建時(shí),他們的配置被驗(yàn)證(例如,建立必要的連接)。在初始化階段未捕獲的錯(cuò)誤導(dǎo)致reporter從運(yùn)行配置中被丟棄。
當(dāng)相應(yīng)組件關(guān)閉時(shí)(例如,在SolrCore關(guān)閉或JVM關(guān)閉時(shí)),reporter被關(guān)閉,但是他們報(bào)告的度量標(biāo)準(zhǔn)仍然保留在相應(yīng)的注冊(cè)表中,如上一節(jié)所述。
以下各節(jié)提供了有關(guān)實(shí)現(xiàn)特定參數(shù)的信息。所有與Solr一起提供的實(shí)現(xiàn)類可以在org.apache.solr.metrics.reporters下面找到。
JMX Reporter使用這個(gè)org.apache.solr.metrics.reporters.SolrJmxReporter類。
它需要以下參數(shù):
reporter創(chuàng)建的對(duì)象名稱是分層的、點(diǎn)分隔的,并且結(jié)構(gòu)正確,以形成相應(yīng)的層次結(jié)構(gòu),例如JConsole。該層次結(jié)構(gòu)由以下元素按照自頂向下的順序組成:
JMX Reporter取代了7.0之前的Solr版本中可用的JMX功能。如果您從早期版本升級(jí)并在Solr啟動(dòng)時(shí)運(yùn)行MBean Server,則Solr將自動(dòng)發(fā)現(xiàn)本地MBean服務(wù)器的位置,并使用SolrJmxReporter的默認(rèn)配置。
您可以在啟動(dòng)時(shí)通過(guò)將-Dcom.sun.management.jmxremote添加到啟動(dòng)命令來(lái)啟動(dòng)具有系統(tǒng)屬性的本地 MBean 服務(wù)器到啟動(dòng)命令。這不會(huì)將reporter配置添加到solr.xml中,所以如果您使用系統(tǒng)屬性啟用它,則必須始終使用系統(tǒng)屬性啟動(dòng)Solr,否則在后續(xù)啟動(dòng)時(shí)將不啟用 JMX。
SLF4J Reporter使用這個(gè)org.apache.solr.metrics.reporters.SolrSlf4jReporter類。
除了上面的公共參數(shù)外,它還需要下列參數(shù):
用戶可以指定logger名稱(例如,Log4j 配置中相應(yīng)的日志記錄配置),以便將與度量相關(guān)的日志記錄輸出到單獨(dú)的文件,然后由外部應(yīng)用程序進(jìn)行處理。
本reporter生成的每個(gè)日志行由特定于配置的字段和一條符合以下格式的消息組成:
type=COUNTER, name={}, count={}
type=GAUGE, name={}, value={}
type=TIMER, name={}, count={}, min={}, max={}, mean={}, stddev={}, median={}, p75={}, p95={}, p98={}, p99={}, p999={}, mean_rate={}, m1={}, m5={}, m15={}, rate_unit={}, duration_unit={}
type=METER, name={}, count={}, mean_rate={}, m1={}, m5={}, m15={}, rate_unit={}
type=HISTOGRAM, name={}, count={}, min={}, max={}, mean={}, stddev={}, median={}, p75={}, p95={}, p98={}, p99={}, p999={}
(花括號(hào)僅作為實(shí)際值的占位符添加)。
該Graphite Reporter使用org.apache.solr.metrics.reporters.SolrGraphiteReporter)類。
除了上面的通用屬性之外,它還具有以下屬性:
如果使用純文本協(xié)議(pickled==false),則可以使用reporter與Graphite以外的其他系統(tǒng)進(jìn)行集成,只要它們能夠接受以以下格式的空間分隔和以線為導(dǎo)向的網(wǎng)絡(luò)輸入:
dot.separated.metric.name[.and.attribute] value epochTimestamp
例如:
example.solr.node.cores.lazy 0 1482932097
example.solr.node.cores.loaded 1 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.count 21 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m1_rate 2.5474287707930614 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m5_rate 3.8003171557510305 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m15_rate 4.0623076220244245 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.mean_rate 0.5698031798408144 1482932097
該Ganglia Reporter使用org.apache.solr.metrics.reporters.SolrGangliaReporter類。
除了上面的常見參數(shù)外,它還有以下參數(shù):
這些度量標(biāo)準(zhǔn)僅在每個(gè)核心的基礎(chǔ)上可用??绾诵膮R總的度量尚不可用。
這些度量標(biāo)準(zhǔn)在每個(gè)核心(例如 solr.core.collection1…?.)的相應(yīng)注冊(cè)表中收集,在INDEX類別下。
基本度量標(biāo)準(zhǔn)總是被收集 - 在solrconfig.xml的/config/indexConfig/metrics部分中使用布爾參數(shù)可以打開其他度量的集合:
<config>
...
<indexConfig>
<metrics>
<majorMergeDocs>524288</majorMergeDocs>
<bool name="mergeDetails">true</bool>
<bool name="directoryDetails">true</bool>
</metrics>
...
</indexConfig>
...
</config>
收集以下指標(biāo):
此外,還會(huì)報(bào)告以下量規(guī),以幫助監(jiān)視索引合并操作的瞬間狀態(tài):
如果布爾標(biāo)志mergeDetails為true,則收集以下附加度量標(biāo)準(zhǔn):
該admin/metrics端點(diǎn)提供對(duì)所有度量組的所有度量的訪問(wèn)。
有幾個(gè)查詢參數(shù)可用于將您的請(qǐng)求僅限于某些度量:
group
要檢索的度量標(biāo)準(zhǔn)組。默認(rèn)值是all
檢索所有組的所有度量標(biāo)準(zhǔn)。其他可能的值是:jvm
,jetty
,node
和core
。請(qǐng)求中可以指定多個(gè)組;多個(gè)組名應(yīng)該用逗號(hào)分隔。
type
要檢索的度量的類型。默認(rèn)是all
檢索所有度量類型。其他可能的值是counter
,gauge
,histogram
,meter
和timer
。一個(gè)請(qǐng)求中可以指定多個(gè)類型;多個(gè)類型應(yīng)該用逗號(hào)隔開。
度量標(biāo)準(zhǔn)名稱的第一個(gè)字符,它將過(guò)濾返回給那些以提供的字符串開頭的度量標(biāo)準(zhǔn)。它可以與group
或type
參數(shù)結(jié)合使用??梢栽谡?qǐng)求中指定多個(gè)前綴;多個(gè)前綴應(yīng)該用逗號(hào)分隔。前綴匹配也是區(qū)分大小寫的。
允許從任何復(fù)合度量中僅請(qǐng)求該度量。多個(gè)property
參數(shù)可以組合起來(lái)作為OR請(qǐng)求。例如,要僅從所有度量標(biāo)準(zhǔn)類型和組中獲得第99和第999百分位數(shù)值,可以添加&property=p99_ms&property=p999_ms
到您的請(qǐng)求中。這可以結(jié)合group
,type
以及prefix
如果有必要。
如果為false,則會(huì)返回更詳細(xì)的響應(yīng)格式。而不是像這樣的回應(yīng):
"metrics": [
"solr.core.gettingstarted",
{
"CORE.aliases": {
"value": ["gettingstarted"]
},
"CORE.coreName": {
"value": "gettingstarted"
},
"CORE.indexDir": {
"value": "/solr/example/schemaless/solr/gettingstarted/data/index/"
},
"CORE.instanceDir": {
"value": "/solr/example/schemaless/solr/gettingstarted"
},
"CORE.refCount": {
"value": 1
},
"CORE.startTime": {
"value": "2017-03-14T11:43:23.822Z"
}
}
]
答案將如下所示:
"metrics": [
"solr.core.gettingstarted",
{
"CORE.aliases": [
"gettingstarted"
],
"CORE.coreName": "gettingstarted",
"CORE.indexDir": "/solr/example/schemaless/solr/gettingstarted/data/index/",
"CORE.instanceDir": "/solr/example/schemaless/solr/gettingstarted",
"CORE.refCount": 1,
"CORE.startTime": "2017-03-14T11:43:23.822Z"
}
]
與其他請(qǐng)求處理程序一樣,Metrics API也可以使用該wt參數(shù)來(lái)定義輸出格式。
在“core”組中只請(qǐng)求“counter”類型的度量,以JSON返回:
http://localhost:8983/solr/admin/metrics?type=counter&group=core
僅請(qǐng)求以“INDEX”開頭的以“XML”返回的“core”組度量標(biāo)準(zhǔn):
http://localhost:8983/solr/admin/metrics?wt=xml&prefix=INDEX&group=core
更多建議: