{"id":4149,"date":"2018-05-02T18:29:19","date_gmt":"2018-05-02T16:29:19","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4149"},"modified":"2018-05-02T18:29:19","modified_gmt":"2018-05-02T16:29:19","slug":"actuator-2-spring-boot","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2018\/05\/actuator-2-spring-boot\/","title":{"rendered":"Actuator in Spring Boot"},"content":{"rendered":"<div class=\"sect2 data-line-3\">\n<h3 id=\"truegesundheitzustand_ber_den_actuator\">Gesundheitzustand \u00fcber den Actuator<\/h3>\n<div class=\"paragraph data-line-5\">\n<p>Das Actuator-Modul von Spring Boot stellt HTTP-Endpunkte bereit, die Auskunft \u00fcber den Zustand der Anwendung geben und es erlauben, die Anwendung zu beeinflussen.<\/p>\n<\/div>\n<div class=\"paragraph data-line-7\">\n<p>Eigene Informationen \u00fcber den &#8222;Gesundheitzustand&#8220; lassen sich einbauen.<\/p>\n<\/div>\n<div class=\"paragraph data-line-9\">\n<p>Die Informationen werden \u00fcber REST ver\u00f6ffentlicht, k\u00f6nnen aber auch \u00fcber JMX abgerufen werden.<\/p>\n<\/div>\n<div class=\"paragraph data-line-11\">\n<p>Achtung: Actuator 1 und Actuator 2 unterscheiden sich deutlich!<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-14\">\n<h3 id=\"trueactuator_in_der_pom\">Actuator in der POM<\/h3>\n<div class=\"paragraph data-line-16\">\n<p>Einbinden wie \u00fcblich \u00fcber die POM:<\/p>\n<\/div>\n<div class=\"listingblock data-line-19\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-xml hljs\" data-lang=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">dependency<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">groupId<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">artifactId<\/span>&gt;<\/span>spring-boot-starter-actuator<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">artifactId<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">dependency<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph data-line-30\">\n<p>Da ganze funktioniert nur im Web-Modus, also muss <code>org.springframework.boot:spring-boot-starter-web<\/code> auch in der POM-Datei sein.<\/p>\n<\/div>\n<div class=\"paragraph data-line-32\">\n<p>Starte man nun die Anwendung, kann man im Log die neuen Endpunkte sehen.<\/p>\n<\/div>\n<div class=\"imageblock data-line-34\"><\/div>\n<\/div>\n<div class=\"sect2 data-line-37\">\n<h3 id=\"trueaktivierung_der_endpunke\">Aktivierung der Endpunkte<\/h3>\n<div class=\"paragraph data-line-39\">\n<p>Damit ein Actuator Endpunkt \u00fcber HTPP verf\u00fcgbar ist, muss er <strong>enabled\u00a0<\/strong>und <strong>exposed<\/strong> sein.<\/p>\n<\/div>\n<div class=\"ulist data-line-41\">\n<ul>\n<li>Die meisten Endpunkte sind standardm\u00e4\u00dfig deaktiviert.<\/li>\n<li>Man kann nur <em>actuator\/health<\/em> und <em>actuator\/health<\/em> nutzen, und selbst da ist wenig Info vorhanden.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph data-line-45\">\n<p>Um mehr Endpunkte freizuschalten setze man die die <em>application.properties<\/em>:<\/p>\n<\/div>\n<div class=\"listingblock data-line-47\">\n<div class=\"content\">\n<pre>management.endpoints.web.exposure.include=*<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph data-line-51\">\n<p>Der Wildcard <code>*<\/code> aktiviert alle, alternativ z\u00e4hlt man kommasepariert auf.<\/p>\n<\/div>\n<div class=\"paragraph data-line-53\">\n<p>Welche Endpunkte es gibt dokumentiert <a class=\"bare\" href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-endpoints.html\">https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-endpoints.html<\/a>.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-58\">\n<h3 id=\"trueauswahl_einiger_spring_boot_endpunkte\">Auswahl einiger Spring Boot Endpunkte<\/h3>\n<div class=\"paragraph data-line-60\">\n<p>Die Endpunkte liegen alle eine Ebene unter <a class=\"bare\" href=\"http:\/\/localhost:8080\/actuator\">http:\/\/localhost:8080\/actuator<\/a>:<\/p>\n<\/div>\n<div class=\"dlist data-line-62\">\n<dl>\n<dt class=\"hdlist1\"><em>\/beans<\/em><\/dt>\n<dd>Alle Spring-Beans<\/dd>\n<dt class=\"hdlist1\"><em>\/env<\/em><\/dt>\n<dd>Das Environment-Properties<\/dd>\n<dt class=\"hdlist1\"><em>\/health<\/em><\/dt>\n<dd>&#8222;health information&#8220;<\/dd>\n<dt class=\"hdlist1\"><em>\/info<\/em><\/dt>\n<dd>Applikationsinformationen<\/dd>\n<dt class=\"hdlist1\"><em>\/loggers<\/em><\/dt>\n<dd>Welche Log-Level f\u00fcr welche Pakete gelten<\/dd>\n<dt class=\"hdlist1\"><em>\/metrics<\/em><\/dt>\n<dd>Metriken \u00fcber die aktuelle Anwendung, es muss eine weitere ID folgen, etwa <em>metrics\/http.server.requests<\/em><\/dd>\n<dt class=\"hdlist1\"><em>\/threaddump<\/em><\/dt>\n<dd>Thread-Dump<\/dd>\n<\/dl>\n<\/div>\n<div class=\"paragraph data-line-77\">\n<p>Zum Beispiel: <a class=\"bare\" href=\"http:\/\/localhost:8080\/actuator\/health\">http:\/\/localhost:8080\/actuator\/health<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph data-line-79\">\n<p>Die genaue JSON-Struktur erkl\u00e4rt <a class=\"bare\" href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/actuator-api\/html\/\">https:\/\/docs.spring.io\/spring-boot\/docs\/current\/actuator-api\/html\/<\/a>.<\/p>\n<\/div>\n<div class=\"imageblock data-line-81\"><\/div>\n<\/div>\n<div class=\"sect2 data-line-84\">\n<h3 id=\"truemanagement_endpoint_url\">Management Endpoint URL<\/h3>\n<div class=\"paragraph data-line-86\">\n<p>Nat\u00fcrlich lassen sich Dinge wie<\/p>\n<\/div>\n<div class=\"ulist data-line-88\">\n<ul>\n<li>Server-Port<\/li>\n<li>URL-Basispfad<\/li>\n<li>freigeschaltete Endpunkte<\/li>\n<li>SSL-Verschl\u00fcsselung<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph data-line-93\">\n<p>konfigurieren.<\/p>\n<\/div>\n<div class=\"paragraph data-line-95\">\n<p>Siehe dazu die Referenz-Dokumentation <a class=\"bare\" href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-monitoring.html\">https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-monitoring.html<\/a><\/p>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-98\">\n<h3 id=\"truebin_ich_gesund\">Bin ich gesund?<\/h3>\n<div class=\"paragraph data-line-100\">\n<p>Unter <em>\/health<\/em> finden sich Informationen \u00fcber den &#8222;Gesundheitszustand&#8220; der Anwendung.<\/p>\n<\/div>\n<div class=\"paragraph data-line-102\">\n<p>Der Status kann <code>UP<\/code> oder <code>DOWN<\/code> sein. Standardm\u00e4\u00dfig gibt es nur <code>status<\/code><\/p>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-109\">\n<h3 id=\"trueauthentifizierung_1_2\">Authentifizierung<\/h3>\n<div class=\"paragraph data-line-111\">\n<p>Bei einer nicht-authentifizierten Verbindung bekommt man nicht mehr zu sehen als den Status.<\/p>\n<\/div>\n<div class=\"paragraph data-line-113\">\n<p>Um das zu \u00e4ndern, m\u00fcssen wir 1. in die POM mit aufnehmen:<\/p>\n<\/div>\n<div class=\"listingblock data-line-116\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-xml hljs\" data-lang=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">dependency<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">groupId<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">artifactId<\/span>&gt;<\/span>spring-boot-starter-security<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">artifactId<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">dependency<\/span>&gt;<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph data-line-123\">\n<p>Dann 2. in <em>application.properties<\/em> (zum Testen!):<\/p>\n<\/div>\n<div class=\"listingblock data-line-125\">\n<div class=\"content\">\n<pre>management.endpoint.health.show-details=always\r\nspring.security.user.name=user\r\nspring.security.user.password=pass<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-132\">\n<div class=\"paragraph data-line-134\">\n<p>Nach dem Neustart der Anwendung und Neuladen der Webseite erfolgt eine BASIC-Authentifizierung. Geben wir <code>user<\/code>\/<code>pass<\/code> ein, sehen wir alles.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2 data-line-143\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Gesundheitzustand \u00fcber den Actuator Das Actuator-Modul von Spring Boot stellt HTTP-Endpunkte bereit, die Auskunft \u00fcber den Zustand der Anwendung geben und es erlauben, die Anwendung zu beeinflussen. Eigene Informationen \u00fcber den &#8222;Gesundheitzustand&#8220; lassen sich einbauen. Die Informationen werden \u00fcber REST ver\u00f6ffentlicht, k\u00f6nnen aber auch \u00fcber JMX abgerufen werden. Achtung: Actuator 1 und Actuator 2 unterscheiden [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[3],"tags":[],"class_list":["post-4149","post","type-post","status-publish","format-standard","hentry","category-spring"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4149"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4149\/revisions"}],"predecessor-version":[{"id":4150,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4149\/revisions\/4150"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}