מדריך למנהל אתחול האביב

1. סקירה כללית

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

במאמר זה נתאר שלבים להגדרת תצורה של שרת Spring Boot Admin וכיצד יישום הופך ללקוח.

2. הגדרת שרת מנהל מערכת

קודם כל, עלינו ליצור יישום אינטרנט פשוט של Spring Boot ולהוסיף את התלות הבאה של Maven:

 de.codecentric spring-boot-admin-starter-server 2.2.2 

אחרי זה, @EnableAdminServer יהיה זמין, לכן נוסיף אותו למחלקה הראשית, כפי שמוצג בדוגמה שלהלן:

@EnableAdminServer @ SpringBootApplication מחלקה ציבורית SpringBootAdminServerApplication {ציבורי ריק ריק סטטי (String [] args) {SpringApplication.run (SpringBootAdminServerApplication.class, args); }}

בשלב זה, אנו מוכנים להפעיל את השרת ולרשום יישומי לקוח.

3. הגדרת לקוח

כעת, לאחר שהקמנו את שרת הניהול שלנו, אנו יכולים לרשום את יישום Spring Boot הראשון שלנו כלקוח. עלינו להוסיף את התלות הבאה של Maven:

 de.codecentric spring-boot-admin-starter-client 2.2.2 

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

spring.boot.admin.client.url = // localhost: 8080

החל מ- Spring Boot 2, נקודות קצה שאינן בְּרִיאוּת ו מידע אינם נחשפים כברירת מחדל.

בואו נחשוף את כל נקודות הקצה:

management.endpoints.web.exposure.include = * management.endpoint.health.show-details = תמיד

4. תצורת אבטחה

לשרת Spring Boot Admin יש גישה לנקודות הקצה הרגישות של היישום, כך מומלץ להוסיף תצורה מסוימת של אבטחה גם למנהל המערכת וגם ליישום הלקוח.

בהתחלה נתמקד בתצורה של אבטחת שרת הניהול. עלינו להוסיף את התלות הבאה של Maven:

 de.codecentric spring-boot-admin-server-ui-login 1.5.7 org.springframework.boot spring-boot-starter-security 2.1.8.RELEASE 

זה יאפשר אבטחה ויוסיף ממשק כניסה ליישום הניהול.

לאחר מכן, נוסיף מחלקת תצורת אבטחה כפי שתוכל לראות למטה:

@Configuration בכיתה ציבורית WebSecurityConfig מרחיב את WebSecurityConfigurerAdapter {AdminServerProperties adminServer הסופי; WebSecurityConfig ציבורי (AdminServerProperties adminServer) {this.adminServer = adminServer; } תצורת הריק המוגנת על ידי @Override (HttpSecurity http) זורקת Exception {SavedRequestAwareAuthenticationSuccessHandler successHandler = SavedRequestAwareAuthenticationSuccessHandler חדש (); successHandler.setTargetUrlParameter ("redirectTo"); successHandler.setDefaultTargetUrl (this.adminServer.getContextPath () + "/"); http .authorizeRequests () .antMatchers (this.adminServer.getContextPath () + "/ assets / **"). permitAll () .antMatchers (this.adminServer.getContextPath () + "/ login"). permitAll () .anyRequest (). מאומת () .and () .formLogin () .loginPage (this.adminServer.getContextPath () + "/ login") .successHandler (successHandler) .and () .logout () .logoutUrl (this.adminServer. getContextPath () + "/ logout") .and () .httpBasic () .and () .csrf () .csrfTokenRepository (CookieCsrfTokenRepository.withHttpOnlyFalse ()) .ignoringRequestMatchers (AntPathRequestMatchSatcherMatcher (this) מופעים ", HttpMethod.POST.toString ()), AntPathRequestMatcher חדש (this.adminServer.getContextPath () +" / instances / * ", HttpMethod.DELETE.toString ()), AntPathRequestMatcher חדש (this.adminServer.getContextPath "/ actuator / **")) .and () .rememberMe () .key (UUID.randomUUID (). toString ()) .tokenValiditySeconds (1209600); }}

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

על מנת לרשום את הלקוח לשרת המאובטח החדש, עלינו להוסיף עוד תצורה לקובץ המאפיינים של הלקוח:

spring.boot.admin.client.username = admin spring.boot.admin.client.password = מנהל

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

עלינו להוסיף כמה מטא נתונים שנשלח לשרת הניהול. מידע זה משמש את השרת להתחברות לנקודות הקצה של הלקוח:

spring.security.user.name = לקוח spring.security.user.password = לקוח spring.boot.admin.client.instance.metadata.user.name = $ {spring.security.user.name} spring.boot.admin. client.instance.metadata.user.password = $ {spring.security.user.password}

שליחת אישורים באמצעות HTTP היא כמובן לא בטוחה - כך שהתקשורת צריכה לעבור על HTTPS.

5. תכונות ניטור וניהול

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

spring.boot.admin.routes.endpoints = env, מדדים, עקבות, jolokia, מידע, configprops

ככל שנלך רחוק יותר, נראה שיש כמה תכונות אחרות שניתן לבחון. אנחנו מדברים על ניהול שעועית JMX באמצעות ג'ולוקיה וגם לוגלוול הַנהָלָה.

Spring Boot Admin תומך גם בשכפול אשכולות באמצעות Hazelcast. עלינו רק להוסיף את התלות הבאה של Maven ולתת לתצורה האוטומטית לעשות את השאר:

 com.hazelcast hazelcast 3.12.2 

אם אנו רוצים מופע מתמשך של Hazelcast, נשתמש בתצורה מותאמת אישית:

@Configuration class class HazelcastConfig {@Bean public Config hazelcast () {MapConfig eventStoreMap = MapConfig new ("spring-boot-admin-event-store") .setInMemoryFormat (InMemoryFormat.OBJECT). SetBackupCount (1) .setEvictionPolicy (Ev. ) .setMergePolicyConfig (MergePolicyConfig חדש (PutIfAbsentMapMergePolicy.class.getName (), 100)); MapConfig sentNotificationsMap = MapConfig חדש ("חנות אביב-אתחול-מנהל-יישום") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (EvictionPolicy.LRU) .setMergePolicyConfig (New MergePolicy). , 100)); Config config = Config new (); config.addMapConfig (eventStoreMap); config.addMapConfig (sentNotificationsMap); config.setProperty ("hazelcast.jmx", "true"); config.getNetworkConfig () .getJoin () .getMulticastConfig () .setEnabled (false); TcpIpConfig tcpIpConfig = config.getNetworkConfig () .getJoin () .getTcpIpConfig (); tcpIpConfig.setEnabled (נכון); tcpIpConfig.setMembers (Collections.singletonList ("127.0.0.1")); הגדרת תצורה; }}

6. התראות

לאחר מכן, בואו נדון באפשרות לקבל התראות משרת הניהול אם קורה משהו עם הלקוח הרשום שלנו. התראות הבאות זמינות לתצורה:

  • אימייל
  • PagerDuty
  • OpsGenie
  • היפצ'ט
  • רָפוּי
  • בוא נדבר

6.1. הודעות דוא"ל

ראשית נתמקד בתצורה של התראות דואר לשרת הניהול שלנו. כדי שזה יקרה, עלינו להוסיף את התלות במתחיל הדואר כמוצג להלן:

 org.springframework.boot spring-boot-starter-mail 2.1.7.RELEASE 

לאחר מכן, עלינו להוסיף תצורת דואר מסוימת:

spring.mail.host = smtp.example.com spring.mail.username = smtp_user spring.mail.password = smtp_password [מוגן בדוא"ל]

כעת, בכל פעם שהלקוח הרשום שלנו משנה את מעמדו מ- UP ל- OFFLINE או אחרת, נשלח דוא"ל לכתובת שהוגדרה לעיל. עבור שאר המודיעים, התצורה דומה.

6.2. הודעות על Hipchat

כפי שנראה, השילוב עם היפצ'אט די פשוט; יש להגדיר רק כמה מאפיינים חובה:

spring.boot.admin.notify.hipchat.auth-token = spring.boot.admin.notify.hipchat.room-id = spring.boot.admin.notify.hipchat.url = // yourcompany.hipchat.com/v2/

לאחר הגדרת אלה, נבחין בחדר ההיפצ'אט כי אנו מקבלים התראות בכל פעם שמצב הלקוח ישתנה.

6.3. תצורת התראות מותאמת אישית

אנו יכולים להגדיר מערכת התראות מותאמת אישית העומדת לרשותנו כמה כלים חזקים לכך. אנחנו יכולים להשתמש ב- מודיע תזכורת לשלוח הודעה מתוזמנת עד שסטטוס הלקוח ישתנה.

או אולי אנחנו רוצים לשלוח התראות לקבוצת לקוחות מסוננת. לשם כך אנו יכולים להשתמש ב- מודיע סינון:

@Configuration Class public NotifierConfiguration {מאגר InstanceRepository פרטי סופי; פרטית ObjectProvider הסופית אחרים מודיעים; public NotifierConfiguration (מאגר InstanceRepository, ObjectProvider otherNotifiers) {this.repository = מאגר; this.otherNotifiers = otherNotifiers; } @Bean הציבור FilteringNotifier filteringNotifier () {נציג CompositeNotifier = CompositeNotifier חדש (this.otherNotifiers.getIfAvailable (אוספים :: ריק רשימה)); להחזיר FilteringNotifier חדש (נציג, this.repository); } @Bean Notifier LoggingNotifier ציבורי () {להחזיר LoggingNotifier חדש (מאגר); } @Primary @Bean (initMethod = "start", destroyMethod = "stop") ציבורי RemindingNotifier remindingNotifier () {RemindingNotifier remindingNotifier = חדש RemindingNotifier (filteringNotifier (), מאגר); remindingNotifier.setReminderPeriod (Duration.ofMinutes (5)); remindingNotifier.setCheckReminderInverval (Duration.ofSeconds (60)); להחזיר תזכורת מודיע; }}

7. מסקנה

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

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

וכמו תמיד, ניתן למצוא את קוד הדוגמה של מדריך זה ב- Github.