Spring Boot Actuator Endpoints מאפשרים לנו למקם ולהתממשק עם היישום שלנו. Spring Actuator הוא משנה Spring Boot ומספק נקודות קצה מובנות שאנו יכולים להפעיל ולהשבית עבור היישום שלנו.
נקודות קצה של Spring Boot Actuator
נקודות הקצה של Spring Boot Actuator חשופות דרך JMX ו-HTTP, ברוב המקרים אנו משתמשים בנקודות הקצה של Actuator המבוססות על HTTP כי הן נגישות בקלות דרך הדפדפן, פקודת CURL, תסריטי של קורט shell וכו '. כמה מנקודות הקצה שימושיות הן:
- beans: נקודת הקצה זו מחזירה את רשימת כל ה-Beans המוגדרים ביישום שלנו.
- env: ספקת מידע על מאפייני הסביבה של Spring.
- health: מציג את מצב היישום.
- info: מציג מידע על היישום, אפשר להגדיר זאת בתכונות סביבת Spring.
- mappings: מציג את רשימת כל נתיבי @RequestMapping.
- shutdown: מאפשר לנו לכבות את היישום בצורה חסרת תקלות.
- 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