___
___ ____ ______ _____________ _____ ___________ ___ ___ ___ ________ ___ _________ ________ ______________ ___ ________ ___ __ _________ ______ ______ __ _______ ___ ______ _______ ____ _ ______ ____ ___________ __ ________ ____ ______
___ ______ ____________ __ ___ _____________ _________ ____ ___ _____ _____ ________ ____ ___ ___ _______ ____ __ ___ __ _________ ______ ______ __ _______ ___ ______ _______ ____ _ ______ ____ ___________ __ ________ ____ _______ ____ __ _ ____ ________ ___________ __ ___ __________ ________
___ ___ ___ ___ _________ _______ _______ __ ___ ______ ______ ______ ___ ____ _________ _____ __ ___ __ ___ ________ ________
-
____________________ ____________ ____ ______ _______ ___ __________ ___ ___________ ___ ___ ________________ _____ ___ _______ __________ __ ___ _____ ___ ______ _____ __ _______ ____ __ _______________________ _____ ___ _ ___________ _______ ____ ______ ________ __ ____ _________ __________ __ ___ _____ _______ ___ _______________________________ ___ ____ ___________ _____ _____________________ ___ ___ ___ ___ ____________________ __ ___ ________ ____ __ ______ ___ _____ _____ __ ___ ___ ____ _________ ____ -
_____________________ _____ ______ ____ ___________ _______ ____________ _ ___________ ________ __ ______ _ ________ _____ ____ ______ ____ _______ __________________ ____ ___ __ ___ __________________________ ____ ____ ___ ____ ___ ____ ______ ____ _______ ___ -
__________________________ _____ ______ ____ ___________ _______ ____________ _ ___________ ________ __ ______ _ ________ __________ _______ ____ ______ ____ _______ __________________ ____ ___ __ ___ __________________________ ____ ____ ___ ____ ___ ____ ______ __ ____ _______ ___
___ ______ ________ _________ __ ___ ______ _______ __ ____ __ ____ ____ __ ______ _____________ ______ __ ________ ___ _________ ________
-
______________________________ ____ ____ ___ _____ ____ _____ __ _________ ___ _____________________________________ __ ______ _____________________ -
_____________________________________ ____ ____ ___ _____ ____ ______ __ _________ ___ _____________________________________ __ ______ _____________________ ____ ________ ____ _________ __ ____ ________ ____ ______ __ _____ ___ ____ _______ ______ ____ ____ ______ ______ _______ ____ ____ _______ __ _____
________
インテグレーションを設定すると、これらの機能にアクセスできるようになります:
-
メトリクスを表示します。独自のカスタムダッシュボードを作成することができ、ほとんどのモニターは組み込みのダッシュボードも提供しています。ダッシュボードの詳細については、「Splunk Observability Cloudでダッシュボードを表示する」を参照してください。
-
Infrastructure Monitoring に表示される環境内の物理サーバー、仮想マシン、AWS インスタンス、およびその他リソースのデータ駆動型の視覚化を表示します。ナビゲータの詳細については、「Splunk Infrastructure Monitoring でナビゲーターを使用する」を参照してください。
-
Metric Finder へアクセスし、モニターから送信されたメトリクスを検索します。詳細は、「メトリクス・ファインダーとメタデータ・カタログを検索する」を参照してください。
____________
このインテグレーションを導入するには、以下の手順に従ってください:
-
Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:
-
[設定] セクションの説明に従ってインテグレーションを設定します。
-
Splunk Distribution of OpenTelemetry Collector を再起動します。
_____________
Smart Agent モニターとCollector のインテグレーションを使用するには、以下の手順に従います:
-
Smart Agent レシーバーを設定ファイルに含めます。
-
レシーバーセクションおよびパイプラインセクションの両方で、Collector 構成にモニタータイプを追加します。
-
「Collector でSmart Agent モニターを使用する」を参照してください。
-
Smart Agent レシーバーの設定方法を参照してください。
-
一般的な構成オプションのリストについては、「モニターの共通設定」を参照してください。
-
Collector の詳細については、「はじめに:Collector を理解して使用する」を参照してください。
-
_______
__ ________ ____ ____________ ___ ___ _________ __ ____ _________ ______________
receivers:
smartagent/jmx:
type: jmx
... # Additional config
_____ ___ ___ _______ __ ___ ___________________________________ _______ __ ____ _____________ _____
service:
pipelines:
metrics:
receivers: [smartagent/jmx]
_____________ ________
___ _________ _____ _____ ___ _____________ _______ ___ ____ ____________
|
______ |
________ |
____ |
___________ |
|---|---|---|---|
|
|
__ |
| ____ ____ __ ______ __ __ ______________ __ ____ _______ ___ _ _________ _____ |
|
|
__ |
| ____ ____ __ ______ __ __ ______________ __ ____ _______ ___ _ _________ _____ _________ |
|
|
__ |
| ___ _______ ___ ___ ___ ___ _________ _________ __ _____ __ ____ __ ______ __ ____ ______ ____ |
|
|
___ |
| _ _______ ______ ______ ____ _________ ____ ______ ____ ___ _______ ___ ___ _________ |
|
|
__ |
|
________ ___ ___ _______________ __ ___________ |
|
|
__ |
|
________ ___ ___ _______________ __ ___________ |
|
|
__ |
| ___ ___ _____ ____ __ ________ __ ______ ______________ __ _________ __ ___ ______ ____ |
|
|
__ |
|
___ ___ _____ ____ ________ __ _________ |
|
|
__ |
|
___ ___ _____ _____ _________ |
|
|
__ |
|
___ _______ _____ ____ __ ___ ___ _______ __ _________ |
|
|
__ |
|
___ _____ _____ ____ ________ __ _________ |
|
|
__ |
| _________ ___ ______ ________ ___ ___ __ ___________ ____ ____ _________ ___________ _______________ ___ ______________ ____ _____ |
|
|
__ |
|
___ _____ __ ________ __ _______ ________________ |
___ _________ __ __ _______ ______ ______ ____ __________ ____ __ ___ ____ _________ __ ___ _________ ________ ______ ________
// Query the JMX endpoint for a single MBean.
ss = util.queryJMX("org.apache.cassandra.db:type=StorageService").first()
// Copied and modified from https://github.com/apache/cassandra
def parseFileSize(String value) {
if (!value.matches("\\d+(\\.\\d+)? (GiB|KiB|MiB|TiB|bytes)")) {
throw new IllegalArgumentException(
String.format("value %s is not a valid human-readable file size", value));
}
if (value.endsWith(" TiB")) {
return Math.round(Double.valueOf(value.replace(" TiB", "")) * 1e12);
}
else if (value.endsWith(" GiB")) {
return Math.round(Double.valueOf(value.replace(" GiB", "")) * 1e9);
}
else if (value.endsWith(" KiB")) {
return Math.round(Double.valueOf(value.replace(" KiB", "")) * 1e3);
}
else if (value.endsWith(" MiB")) {
return Math.round(Double.valueOf(value.replace(" MiB", "")) * 1e6);
}
else if (value.endsWith(" bytes")) {
return Math.round(Double.valueOf(value.replace(" bytes", "")));
}
else {
throw new IllegalStateException(String.format("FileUtils.parseFileSize() reached an illegal state parsing %s", value));
}
}
localEndpoint = ss.HostIdToEndpoint.get(ss.LocalHostId)
dims = [host_id: ss.LocalHostId, cluster_name: ss.ClusterName]
output.sendDatapoints([
// Equivalent of "Up/Down" in the `nodetool status` output.
// 1 = Live; 0 = Dead; -1 = Unknown
util.makeGauge(
"cassandra.status",
ss.LiveNodes.contains(localEndpoint) ? 1 : (ss.DeadNodes.contains(localEndpoint) ? 0 : -1),
dims),
util.makeGauge(
"cassandra.state",
ss.JoiningNodes.contains(localEndpoint) ? 3 : (ss.LeavingNodes.contains(localEndpoint) ? 2 : 1),
dims),
util.makeGauge(
"cassandra.load",
parseFileSize(ss.LoadString),
dims),
util.makeGauge(
"cassandra.ownership",
ss.Ownership.get(InetAddress.getByName(localEndpoint)),
dims)
])
____ ____ ____ ____ ______ __ _________ ______ ______ _____ __ __ _______ _ __________ ___ ________ __ ________ _______ ______ ____ ____ ___________ ___ _______ ________ _____
_______
_____ ___ __ _______ _________ ___ ____ ____________
_______________
__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____
_________ __ ______ _____________ _____ _________
-
______ _ ____ __ ___ ______ _______ _______
-
_______ ______ ________
_________ __ ___________ _________ ___ ____ _____ _____
-
___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________
-
____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______