[JAVA] Paramètres du compteur de performances JVM pour ApplicationInsights.xml

Personne ne l'a mis ensemble, donc je l'ai fait en appuyant sur ManagementFactory.getPlatformMBeanServer (). Pour le moment, je prends le CPU, la mémoire, les temps et le temps GC.

Je pense qu'il peut être utilisé lors de la création d'une application JVM censée collecter des compteurs de performances avec Application Insights.

Puisqu'il s'agira soit de PS / CMS / G1 avec l'option GC, nous sommes en train de le trier. Cependant, pour le moment, il semble que des compteurs inexistants ne soient pas collectés dans certains cas, donc je pense que vous pouvez les ajouter avec ce paramètre.

displayName sera le nom lors de la recherche avec Analytics, afin que vous puissiez le réécrire de manière appropriée

<?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>

(Ajouté le 09/07/2019)

À propos, si useBuiltIn dans XML est défini sur False, Metrics around here ne prendra pas ceux avec BuiltIn. (Emplacement de traitement )

Ce qui suit est une bonne idée pour les paramètres XML détaillés. L'intervalle par défaut est de 60 secondes, donc si vous souhaitez le raccourcir, vous devez écrire le paramètre.

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

De plus, certaines valeurs telles que java.lang: type = GarbageCollector, name = PS Mark Sweep ne peuvent pas être obtenues. Voici le problème. Cannot fetch jmx counter for GC with Java SDK agent #952

(Ajout jusqu'à présent)

Code en appuyant sur ManagementFactory.getPlatformMBeanServer () pour faire la liste ci-dessus

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(), "???");
				}
			}
		}
	}
}

L'attribut composite est comme prendre la valeur-clé du contenu. (Je ne savais pas comment obtenir la valeur de la clé, mais je peux la voir avec toString) Par exemple, la mémoire est le cas et la sortie est la suivante.

java.lang:type=MemoryPool,name=Metaspace
~ Omis ~
  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})

Vous pouvez voir le contenu à l'arrière.

Dans ce cas, dans JMX, le nom de l'attribut est "Usage" et le contenu est "utilisé", mais lors de l'écriture dans le XML d'Application Insights, l'attribut est ʻUsage.used et l'attribut type = "composite" est également ajouté. Devenir.

Recommended Posts

Paramètres du compteur de performances JVM pour ApplicationInsights.xml
Paramètres Gradle pour l'utilisation de JUnit 5