נקודות קצה של Spring Boot Actuator

Spring Boot Actuator Endpoints מאפשרים לנו למקם ולהתממשק עם היישום שלנו. Spring Actuator הוא משנה Spring Boot ומספק נקודות קצה מובנות שאנו יכולים להפעיל ולהשבית עבור היישום שלנו.

נקודות קצה של Spring Boot Actuator

נקודות הקצה של Spring Boot Actuator חשופות דרך JMX ו-HTTP, ברוב המקרים אנו משתמשים בנקודות הקצה של Actuator המבוססות על HTTP כי הן נגישות בקלות דרך הדפדפן, פקודת CURL, תסריטי של קורט shell וכו '. כמה מנקודות הקצה שימושיות הן:

  1. beans: נקודת הקצה זו מחזירה את רשימת כל ה-Beans המוגדרים ביישום שלנו.
  2. env: ספקת מידע על מאפייני הסביבה של Spring.
  3. health: מציג את מצב היישום.
  4. info: מציג מידע על היישום, אפשר להגדיר זאת בתכונות סביבת Spring.
  5. mappings: מציג את רשימת כל נתיבי @RequestMapping.
  6. shutdown: מאפשר לנו לכבות את היישום בצורה חסרת תקלות.
  7. threaddump: ספק דאמפ של תהליכי היישום.

אתה יכול לקבל את רשימת ה- endpoints של מנוע הפעלה של Spring מכאן.

אבטחת נקודות סיום של Spring Actuator

רק "health" ו-"info" חשופים בלי אבטחה, לגישה לכל ה-endpoints האחרים אנו צריכים להגדיר את היישום שלנו עבור אבטחת Spring. זה קל מאוד להשיג את זה, נגיע אליו בחלק האחר של המדריך.

אפשר נקודות סיום של Spring Actuator

כאשר אנו מוסיפים תלותי Spring Actuator לפרוייקט ה- spring boot שלנו, זה מאפשר באופן אוטומטי נקודות סיום של actuator. הוסף את התלותי מטה ליישום ה-spring שלך כדי לאפשר נקודות סיום של spring boot actuator.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

עכשיו כאשר תפעיל את היישום, תראה נקודות סיום של actuator ממופות ביומנים.

2018-06-19 15:23:20.715  INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

שים לב שרק שני נקודי קצה – health ו־info נמפתו. בתמונה למטה מוצגת פלט של נקודות הקצה הללו. האם שמת לב שאין נתונים בנתיב /actuator/info? זה בגלל שלא הגדרנו אותם. פשוט הוסף את המאפיינים הבאים לקובץ ה־application.properties שלך.

info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot

אנא אתחל את היישום ותקבל את הפלט הבא:

התאמת נתיב בסיס של נקודות הקצה של Actuator

ברירת המחדל של נתיב הבסיס של נקודות הקצה של Actuator הוא /actuator, אנו יכולים לשנות אותו לערך אחר כלשהו על ידי הגדרת management.endpoints.web.base-path בקובץ התכונות של היישום שלנו.

management.endpoints.web.base-path=/management

חשיפת נקודות קצה אחרות של Actuator

אנו יכולים לאפשר ולנטרל נקודות קצה אחרות של Actuator דרך קבצי התכונות. אם ברצונך לאפשר את כל נקודות הקצה של Actuator, אז הוסף את המאפיין הבא.

management.endpoints.web.exposure.include=*

כדי להפעיל רק נקודות קצה מסוימות, יש לספק את רשימת מזהה הנקודה הקצה.

management.endpoints.web.exposure.include=health,info,beans,env

אבטחת המערכת של Spring עבור נקודות הקצה

שימו לב שאנו צריכים להוסיף אבטחת Spring ליישום שלנו כדי לאפשר נקודות קצה נוספות מכיוון שכל הנקודות האחרות דורשות לפחות אימות בסיסי. הוסיפו את התלות הבאה עבור אבטחת Spring ביישום שלך.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

כמו כן, הוסיפו שם משתמש וסיסמה של אבטחת Spring בקובץ התכונות של היישום.

spring.security.user.name=pankaj
spring.security.user.password=pankaj

הפעילו מחדש את היישום ותראו נקודות קצה נוספות שנמפתחות.

2018-06-19 16:18:22.211  INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

כעת כאשר תנסו לגשת לנקודות הקצה המאובטחות, עליכם לספק פרטי התחברות. התמונות למטה מציגות את התגובה של נקודות הקצה beans ו־env/java.home.

נקודות הקצה המותאמות של Spring Actuator

כלאחד מתכוניו של Spring Framework יש יכולת ייחודית להרחיב. אנו יכולים ליצור נקודות סיום אחרות באמצעות הערות @Endpoint בקלות. לאחר מכן, עלינו להשתמש בהערות @ReadOperation, @WriteOperation או @DeleteOperation על השיטות כדי לחשוף אותן כנקודת סיום של אקטואטור. ניתן ליצור נקודות סיום ספציפיות לטכנולוגיה באמצעות הערות @JmxEndpoint ו- @WebEndpoint. הנה דוגמה לנקודת סיום מותאמת אישית של Spring Actuator שלנו.

package com.journaldev.spring;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {

	@ReadOperation
	@Bean
	public String hi() {
		return "Hi from custom endpoint";
	}
}

האם שמת לב לזיהוי נקודת הסיום? עלינו גם להגדיר את זה ברשימת נקודות האקטואטור המאופשרות. עדכן את התכונות הבאות בקובץ application.properties.

management.endpoints.web.exposure.include=health,info,beans,env,myendpoint

עכשיו כשתתחיל את היישום, בדוק אם נקודת הסיום החדשה מומפתת בלוגים.

2018-06-19 17:06:59.743  INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

התמונה למטה מראה את הפלט כאשר אנו קוראים לנקודת סיום אקטואטור המותאמת אישית שלנו.

סיכום

Spring Boot Actuator הוא מודול ניהול ומידע שמוכן לפעולה בסביבות הפקודה. אנו יכולים להרחיב אותו בקלות כדי להוסיף API מותאמות אישית ולנהל את היישום שלנו.

ניתן להוריד את הפרויקט השלם מה- מאגר GitHub שלנו.

Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints