[JAVA] Einstellungen des JVM-Leistungsindikators für ApplicationInsights.xml

Niemand hat es zusammengestellt, also habe ich es gemacht, indem ich auf "ManagementFactory.getPlatformMBeanServer ()" geklickt habe. Zur Zeit nehme ich die CPU, den Speicher, die GC-Anzahl und die Zeit.

Ich denke, es kann verwendet werden, wenn eine JVM-Anwendung erstellt wird, die Leistungsindikatoren mit Application Insights erfassen soll.

Da es in der GC-Option entweder PS / CMS / G1 sein wird, sortieren wir es aus. Im Moment scheint es jedoch so zu sein, dass in einigen Fällen nicht vorhandene Zähler nicht erfasst werden. Ich denke, Sie können diese Einstellung so lassen, wie sie ist.

displayName ist der Name bei der Suche mit Analytics, sodass Sie ihn entsprechend umschreiben können

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights
	xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
	<PerformanceCounters>
		<UseBuiltIn>False</UseBuiltIn>
		<Jmx>
			<!-- CPU -->
			<Add objectName="java.lang:type=OperatingSystem"
				attribute="ProcessCpuLoad" displayName="CPU Process Load" />
			<Add objectName="java.lang:type=OperatingSystem"
				attribute="SystemCpuLoad" displayName="CPU System Load" />
			<!-- Thread -->
			<Add objectName="java.lang:type=Threading" attribute="ThreadCount"
				displayName="Thread Count" />

			<!-- Memory -->
			<Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used"
				displayName="MEM Heap Used" type="composite" />
			<Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.committed"
				displayName="MEM Heap Committed" type="composite" />

			<Add objectName="java.lang:type=Memory" attribute="NonHeapMemoryUsage.used"
				displayName="MEM Non Heap Used" type="composite" />
			<Add objectName="java.lang:type=Memory" attribute="NonHeapMemoryUsage.committed"
				displayName="MEM Non Heap Committed" type="composite" />

			<!-- Memory(Metaspace) JVM 8 over -->
			<Add objectName="java.lang:type=MemoryPool,name=Metaspace" attribute="Usage.used"
				displayName="MEM Metaspace Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=Metaspace" attribute="Usage.committed"
				displayName="MEM Metaspace Committed" type="composite" />

			<!-- Memory(PS) -->
			<!-- Not works... -->
			<Add objectName="java.lang:type=MemoryPool,name=PS Eden Space" attribute="Usage.used"
				displayName="MEM(PS) New Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=PS Eden Space" attribute="Usage.committed"
				displayName="MEM(PS) New Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=PS Survivor Space" attribute="Usage.used"
				displayName="MEM(PS) Survivor Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=PS Survivor Space" attribute="Usage.committed"
				displayName="MEM(PS) Survivor Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=PS Old Gen" attribute="Usage.used"
				displayName="MEM(PS) Old Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=PS Old Gen" attribute="Usage.committed"
				displayName="MEM(PS) Old Committed" type="composite" />
			<!-- GC(PS) -->
			<Add objectName="java.lang:type=GarbageCollector,name=PS MarkSweep"
				attribute="CollectionCount" displayName="FGC - Count" />
			<Add objectName="java.lang:type=GarbageCollector,name=PS MarkSweep"
				attribute="CollectionTime" displayName="FGC - Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=PS Scavenge"
				attribute="CollectionTime" displayName="YGC - Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=PS Scavenge"
				attribute="CollectionCount" displayName="YGC - Count" />

			<!-- Memory(CMS) -XX:+UseConcMarkSweepGC -->
			<Add objectName="java.lang:type=MemoryPool,name=Par Eden Space" attribute="Usage.used"
				displayName="MEM(CMS) New Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=Par Eden Space" attribute="Usage.committed"
				displayName="MEM(CMS) New Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=Par Survivor Space" attribute="Usage.used"
				displayName="MEM(CMS) Survivor Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=Par Survivor Space" attribute="Usage.committed"
				displayName="MEM(CMS) Survivor Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=CMS Old Gen" attribute="Usage.used"
				displayName="MEM(CMS) Old Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=CMS Old Gen" attribute="Usage.committed"
				displayName="MEM(CMS) Old Committed" type="composite" />
			<!-- GC(CMS) -->
			<Add objectName="java.lang:type=GarbageCollector,name=ConcurrentMarkSweep"
				attribute="CollectionCount" displayName="FGC(CMS) Count" />
			<Add objectName="java.lang:type=GarbageCollector,name=ConcurrentMarkSweep"
				attribute="CollectionTime" displayName="FGC(CMS) Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=ParNew"
				attribute="CollectionTime" displayName="YGC(CMS) Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=ParNew"
				attribute="CollectionCount" displayName="YGC(CMS) Count" />

			<!-- Memory(G1GC) -XX:+UseG1GC -->
			<Add objectName="java.lang:type=MemoryPool,name=G1 Eden Space" attribute="Usage.used"
				displayName="MEM(G1) New Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=G1 Eden Space" attribute="Usage.committed"
				displayName="MEM(G1) New Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=G1 Survivor Space" attribute="Usage.used"
				displayName="MEM(G1) Survivor Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=G1 Survivor Space" attribute="Usage.committed"
				displayName="MEM(G1) Survivor Committed" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=G1 Old Gen" attribute="Usage.used"
				displayName="MEM(G1) Old Used" type="composite" />
			<Add objectName="java.lang:type=MemoryPool,name=G1 Old Gen" attribute="Usage.committed"
				displayName="MEM(G1) Old Committed" type="composite" />
			<!-- GC(G1GC) -->
			<Add objectName="java.lang:type=GarbageCollector,name=G1 Young Generation"
				attribute="CollectionCount" displayName="YGC(G1) Count" />
			<Add objectName="java.lang:type=GarbageCollector,name=G1 Young Generation"
				attribute="CollectionTime" displayName="YGC(G1) Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=G1 Old Generation"
				attribute="CollectionTime" displayName="FGC(G1) Time" />
			<Add objectName="java.lang:type=GarbageCollector,name=G1 Old Generation"
				attribute="CollectionCount" displayName="FGC(G1) Count" />
		</Jmx>
	</PerformanceCounters>
</ApplicationInsights>

(Hinzugefügt am 09.07.2019)

Übrigens, wenn useBuiltIn in XML auf False gesetzt ist, werden Metriken hier diejenigen mit "BuiltIn" nicht übernehmen. (Verarbeitungsort )

Das Folgende ist eine gute Idee für detaillierte XML-Einstellungen. Das Standardintervall beträgt 60 Sekunden. Wenn Sie es also kürzer machen möchten, müssen Sie die Einstellung schreiben.

https://github.com/microsoft/ApplicationInsights-Java/wiki/ApplicationInsights.XML

Einige Werte wie "java.lang: type = GarbageCollector, name = PS Mark Sweep" können ebenfalls nicht abgerufen werden. Das Folgende ist das Problem. Cannot fetch jmx counter for GC with Java SDK agent #952

(Ergänzung bisher)

Code, wenn Sie auf "ManagementFactory.getPlatformMBeanServer ()" klicken, um die obige Liste zu erstellen

import java.lang.management.ManagementFactory;
import java.util.Set;

import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.ReflectionException;

public class Test {

	public static void main(String[] s)
			throws ReflectionException, IntrospectionException, InstanceNotFoundException, AttributeNotFoundException,
			MBeanException {
		MBeanServer server = ManagementFactory.getPlatformMBeanServer();
		Set<ObjectName> names = server.queryNames(null, null);
		for (ObjectName name : names) {
			System.out.println(name);

			MBeanInfo beanInfo = server.getMBeanInfo(name);
			for (MBeanAttributeInfo attrInfo : beanInfo.getAttributes()) {
				try {
					Object attrObject = server.getAttribute(name, attrInfo.getName());
					if (attrObject instanceof Attribute) {
						Attribute attr = (Attribute) attrObject;
						Object attrValueObject = ((Attribute) attrObject).getValue();
						System.out.printf("  attribute: %s = %s\n", attrInfo.getName(), attrValueObject);
					} else {
						System.out.printf("  attribute: %s = %s\n", attrInfo.getName(), attrObject);
					}
				} catch (Exception e) {
					System.out.printf("  attribute: %s = %s\n", attrInfo.getName(), "???");
				}
			}
		}
	}
}

Das zusammengesetzte Attribut entspricht dem Schlüsselwert des Inhalts. (Ich wusste nicht, wie ich den Schlüsselwert erhalten sollte, aber ich kann ihn mit toString sehen.) Zum Beispiel ist Speicher der Fall und die Ausgabe ist wie folgt.

java.lang:type=MemoryPool,name=Metaspace
~ Ausgelassen ~
  attribute: Usage = javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),contents={committed=6029312, init=0, max=-1, used=5663360})

Sie können den Inhalt auf der Rückseite sehen.

In diesem Fall lautet der Attributname in JMX "Verwendung" und in Inhalten "verwendet". Beim Schreiben in XML von Application Insights wird jedoch das Attribut "type =" zusammengesetzt "zum Attribut" Verwendung.gebraucht "hinzugefügt. Werden.

Recommended Posts

Einstellungen des JVM-Leistungsindikators für ApplicationInsights.xml
Gradle-Einstellungen für die Verwendung von JUnit 5