مقدمة في التمهيد الحذاء الربيع

تحية ، الخبروفيت! في غضون أسبوع ، ستبدأ الدروس في المجموعة الجديدة من الدورة التدريبية "Developer on the Spring Framework" . في هذا الصدد ، نشارككم مواد مفيدة تخبرنا ما هو محرك الربيع وكيف يمكن أن تكون مفيدة.



  1. ما هو المحرك الربيع؟
  2. كيف تضيف Spring Actuator إلى مشروع Maven أو Gradle؟
  3. إنشاء مشروع Spring Boot مع تبعية Spring Actuator.
  4. رصد التطبيق مع نقاط نهاية المحرك الربيع.

ما هو المحرك الربيع؟

بعد قيامك بتطوير التطبيق ونشره في الإنتاج ، من المهم للغاية مراقبة أدائه. هذا صحيح بشكل خاص بالنسبة للتطبيقات المهمة ، مثل الأنظمة المصرفية ، حيث يؤثر فشل التطبيق بشكل مباشر على العمل.

تقليديا ، قبل المشغل الربيعي ، كنا نحتاج إلى كتابة الكود لاختبار صحة التطبيق ، لكن مع المشغل الربيعي لم نكن بحاجة إلى كتابة الكود. يوفر Spring Actuator العديد من نقاط النهاية التي يمكن أن تكون مفيدة لمراقبة التطبيق.

كيف تضيف Spring Actuator إلى مشروع Maven أو Gradle؟

مخضرم

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

Gradle

 dependencies { compile("org.springframework.boot:spring-boot-starter-actuator") } 

إنشاء مشروع إقلاع الربيع مع مشغل الربيع

دعونا نمضي قدمًا وننشئ مشروع Spring Boot باستخدام تبعيات Spring Actuator و Web و DevTools باستخدام Spring Initializer .

يرجى ملاحظة أنه في وقت كتابة هذا التقرير ، كان إصدار Spring Boot هو 2.1.0.



استيراد المشروع إلى Eclipse أو أي IDE آخر وتشغيل SpringActuatorApplication.java .

في وحدة التحكم ، سترى ما يلي:



يمكنك أن ترى أن Tomcat المدمجة تعمل على المنفذ 8080 ، وأن SpringActuatorApplication يعمل على Tomcat. يمكنك أيضًا رؤية أن نقاط النهاية الخاصة بالمشغل متوفرة في /actuator.

 018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] nbjsSpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823) 2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] osbaeweb.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'. 

رصد التطبيق مع نقاط نهاية المحرك الربيع

كما قلنا أعلاه ، يوفر Spring Actuator العديد من نقاط النهاية التي يمكننا استخدامها لمراقبة صحة التطبيق.

الهويةوصف
auditevents
يوفر معلومات الحدث
التدقيق للتطبيق الحالي.
فاصوليايعرض قائمة كاملة للجميع
فاصوليا الربيع في التطبيق.
مخابئمعلومات مخبأ.
الشروطيظهر الشرط ، والتي
تم حسابها لفئات التكوين
والتكوين التلقائي ، والأسباب ، ل
التي تطابقت أم لا
أنها مطابقة.
configpropsيعرض قائمة للجميع
ConfigurationProperties
الحياة الفطريةيعرض الخصائص من
ConfigurableEnvironment.
تسلكهيظهر هجرة قاعدة البيانات
Flyway التي تم تطبيقها.
الصحةيظهر المعلومات الصحية
التطبيق.
httptraceيعرض معلومات التتبع
HTTP (بشكل افتراضي ، آخر 100 HTTP
) والاستفسارات الجواب.
معلوماتيعرض معلومات إضافية
عن التطبيق.
integrationgraphعد الربيع التكامل.
قطع الاشجاريعرض ويسمح
تغيير تكوين قطع الاشجار في
التطبيق.
liquibaseيظهر الهجرات المطبقة
قواعد بيانات Liquibase
المقاييسيظهر معلومات المقاييس
للتطبيق الحالي.
تعييناتيعرض قائمة بجميع المسارات.
RequestMapping.
scheduledtasksيعرض المهام المجدولة
(المهام المجدولة).
جلساتيسمح الاسترداد والحذف
جلسات المستخدم من المستودعات ،
بدعم من دورة الربيع. غير متوفر
عند استخدام جلسة الربيع لرد الفعل
تطبيقات الويب.
إغلاقللسماح للتطبيق بشكل صحيح
لاستكمال العمل.
threaddumpيعرض دفق المعلومات.

تمكين نقاط النهاية

افتراضيًا ، يتم تمكين جميع نقاط النهاية باستثناء shutdown . لتمكين نقطة النهاية ، استخدم الخاصية التالية في ملف application.properties .

 management.endpoint.<code><</code>id<code>></code>.enabled 

ملاحظة المترجم: بشكل افتراضي ، لا يمكن الوصول إلى جميع نقاط النهاية إلا من خلال JMX ، ولا يمكن الوصول عبر HTTP إلى جميع نقاط النهاية (انظر أدناه).

مثال:

لتمكين نقطة نهاية shutdown ، نحتاج إلى إدخال الإدخال التالي في ملف application.properties :

 management.endpoint.shutdown.enabled=true 

يمكننا تعطيل جميع نقاط النهاية ومن ثم تضمين فقط تلك التي نحتاجها. في التكوين التالي ، سيتم تعطيل جميع نقاط النهاية باستثناء info .

 management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true 

الوصول إلى نقاط النهاية عبر HTTP

دعنا نذهب إلى عنوان URL المضيف المحلي : 8080 / مشغل وننظر في نقاط النهاية المتاحة.

ملاحظة: أستخدم Postman للاختبار لأنه يعرض JSON بتنسيق جيد التنظيم. يمكنك استخدام أي أداة أخرى أو مجرد متصفح.



كما لاحظت بالفعل ، تظهر فقط نقاط النهاية الخاصة health info هنا. لأن هذه هي نقاط النهاية الوحيدة التي يمكن الوصول إليها بشكل افتراضي عبر http. يتم إغلاق الوصول عبر http إلى نقاط النهاية الأخرى افتراضيًا لأسباب أمنية ، لأنها قد تحتوي على معلومات سرية ، وبالتالي قد يتم اختراقها.

الوصول إلى نقاط نهاية محددة

إذا أردنا توفير الوصول عبر الويب (http) إلى نقاط النهاية الأخرى ، فسنحتاج إلى إدخال الإدخالات التالية في ملف application.properties .

 management.endpoints.web.exposure.include=<    ><a href="http://localhost:8080/actuator"></a> 

مثال :

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

الآن ، بعد إضافة الإدخال أعلاه إلى application.properties ، دعنا نذهب مرة أخرى إلى http: // localhost: 8080 / actuator

كما نرى في لقطة الشاشة أدناه ، يتم تضمين نقطة النهاية env أيضًا.



الوصول إلى جميع نقاط النهاية

إذا أردنا تضمين جميع نقاط النهاية ، فيمكننا استخدام علامة * كما هو موضح أدناه.

 management.endpoints.web.exposure.include=* 



الوصول إلى جميع ما عدا بضع نقاط النهاية

يقوم المدخلان أدناه بتنشيط جميع نقاط النهاية ، ولكن تعطيل نقطة النهاية env.

 management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env 





تعطيل جميع نقاط النهاية HTTP

إذا كنت لا ترغب في تقديم نقاط النهاية عبر HTTP ، يمكنك القيام بذلك عن طريق تعيين ما يلي في ملف application.properties :

 management.server.port=-1 

او نحو ذلك:

 management.endpoints.web.exposure.exclude=* 

قم بتكوين عناوين URL للوصول إلى نقاط النهاية

بشكل افتراضي ، يمكن الوصول إلى جميع نقاط النهاية عن طريق URL /actuator في عناوين النموذج /actuator/{id} . ومع ذلك ، يمكنك تغيير المسار الأساسي /actuator باستخدام الخاصية التالية في application.properties .

 management.endpoints.web.base-path 

على سبيل المثال ، إذا كنت ترغب في جعل URL الأساسي مثل /monitor بدلاً من /actuator يمكنك القيام بذلك على النحو التالي:

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



في هذه الحالة ، ستكون جميع نقاط النهاية متاحة كـ /monitor/{id} بدلاً من /actuator/{id}



نقاط النهاية الحذاء الربيع المحرك

لنناقش بعضًا من أهم نقاط النهاية.

/ الصحة

تعطي نقطة النهاية الخاصة health الحالة العامة للتطبيق: هل هو قيد التشغيل أم لا. هذا مهم جدًا لمراقبة حالة التطبيق عندما يكون قيد الإنتاج. يمكن دمج نقطة النهاية هذه مع تطبيقات المراقبة وستكون مفيدة للغاية لتحديد صحة التطبيقات في الوقت الفعلي.

يعتمد مقدار المعلومات التي توفرها نقطة النهاية health على خاصية management.endpoint.health.show-details في ملف application.properties .

إذا كانت management.endpoint.health.show-details=never ، فلن يتم عرض أي معلومات إضافية. في هذه الحالة ، سترى فقط ما يلي (هذا هو السلوك الافتراضي).



إذا كانت management.endpoint.health.show-details=always ، فسيتم عرض معلومات إضافية لجميع المستخدمين. كما نرى في الإجابة أدناه ، لدينا معلومات حول مساحة القرص (diskSpace). إذا كان التطبيق الخاص بك متصلاً بقاعدة بيانات ، فستظهر لك أيضًا معلومات حول حالة قاعدة البيانات.



إذا كانت management.endpoint.health.show-details=when-authorized ، فسيتم عرض معلومات إضافية فقط للمستخدمين المصرح لهم. يمكن تكوين التفويض باستخدام خاصية management.endpoint.health.roles .

مؤشرات محددة مسبقا

يحتوي مشغّل Spring Boot على العديد من "المؤشرات الصحية" التي تم تكوينها تلقائيًا (HeathIndicators) لاختبار صحة أجزاء مختلفة من التطبيق. على سبيل المثال ، يوفر DiskspaceHealthIndicator معلومات مساحة القرص. إذا كنت تستخدم MongoHealthIndicator ، MongoHealthIndicator بفحص قاعدة بيانات Mongo (ما إذا كان الخادم يعمل أم لا) ويعرض المعلومات ذات الصلة. بشكل افتراضي ، يتم تحديد الحالة النهائية للتطبيق بواسطة HealthAggregator ، والذي يقوم ببساطة بفرز قائمة الحالات التي يوفرها كل HealthIndicator . يتم استخدام الحالة الأولى في القائمة التي تم فرزها كحالة نهائية للتطبيق.

تعطيل جميع المؤشرات التي تم تكوينها مسبقا

يتم تمكين "مؤشرات الصحة" الموضحة أعلاه افتراضيًا ، ومع ذلك ، يمكنك إيقافها باستخدام الخاصية التالية:

 management.health.defaults.enabled=false 

تعطيل مؤشر واحد

بدلاً من ذلك ، يمكنك تعطيل HealthIndicator منفصل ، كما هو موضح أدناه ، على سبيل المثال ، لتعطيل التحقق من مساحة القرص:

 management.health.diskspace.enabled=false 

ملاحظة: سيكون معرف أي HealthIndicator هو اسم الحبة بدون لاحقة HealthIndicator .

على سبيل المثال :

 DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource 

وهلم جرا ...

كتابة المؤشرات الخاصة بك (HealthIndicator)

جنبا إلى جنب مع HealthIndicator المدمج الذي يوفره Spring Boot Actuator ، يمكننا إنشاء مؤشرات حالة مخصصة. للقيام بذلك ، تحتاج إلى إنشاء فصل يقوم بتنفيذ واجهة HealthIndicator ، وتطبيق طريقة health() وإرجاع Health كإجابة بالمعلومات ذات الصلة ، كما هو موضح أدناه:

 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code. // int errorCode = performHealthCheck(); if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } } 

دعنا نذهب إلى نقطة النهاية الصحية مرة أخرى ونرى ما إذا كان مؤشرنا ينعكس أم لا.



نرى مؤشرنا.

حالة مكون واحد

يمكنك أيضًا التحقق من حالة المكون الفردي. في المثال أعلاه ، رأينا المؤشر الذي كتبناه و diskSpace.

إذا كنا نريد أن نرى فقط حالة القرص ، يمكننا استخدام عنوان URL التالي:

http: // localhost: 8080 / مشغل / صحة / diskSpace



/ معلومات

توفر نقطة نهاية info عامة حول التطبيق الذي يتلقاه من ملفات مثل build-info.properties أو git.properties أو من الخصائص المحددة في application.properties .

نظرًا لعدم وجود مثل هذا الملف في مشروعنا ، ستكون الإجابة فارغة ، كما هو موضح أدناه:



يعرض Spring Boot Actuator معلومات META-INF/build-info.properties حالة وجود META-INF/build-info.properties . يتم إنشاء ملف معلومات المشروع هذا في وقت الإنشاء بواسطة هدف build-info . هنا يمكنك أيضًا إضافة عدد عشوائي من الخصائص الإضافية.

دعنا نضيف هدف build-info عن spring-boot-maven-plugin pom.xm spring-boot-maven-plugin إلى pom.xm l.

 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>UTF-8</encoding.source> <encoding.reporting>UTF-8</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin> 

الآن ، دعونا نلقي نظرة على نقطة نهاية info مرة أخرى ونرى معلومات التجميع ، كما هو موضح أدناه:



بالإضافة إلى ذلك ، يمكننا إضافة معلومات التطبيق باستخدام مفتاح info إلى application.properties ، كما هو موضح أدناه ، وسيتم عرضها في نقطة النهاية /info .

 info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT 



/ الفاصوليا

تُظهر نقطة نهاية beans جميع beans المعرفة في حاوية الزنبرك بالمعلومات التالية عن كل حبة:

 aliases :    scope :   type :    resource :  (),     dependencies :    

على سبيل المثال ، قمت بإنشاء RestController باسم TestController وحقن مكونًا يسمى TestService

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private TestService testService; @GetMapping("/messages") public String getMessage() { return "Hello"; } } import org.springframework.context.annotation.Configuration; @Configuration public class TestService { } 

يمكنك أن ترى كيف يظهر هذا ل testController في الصورة أدناه.



/ configprops
تُظهر configProps جميع @ConfigurationProperties المشروحة بواسطة @ConfigurationProperties .



في لقطة الشاشة أعلاه ، نرى فاصوليا معرّفتين في إطار الربيع نفسه ويتم @ConfigurationProperties بتعليقات @ConfigurationProperties وبالتالي يتم عرضها في هذه النقطة النهائية.

تُظهر لقطة الشاشة أدناه شفرة مصدر HttpTraceProperties المشروحة بواسطة @ConfigurationProperties .



/ env

توفر نقطة النهاية env جميع المعلومات البيئية بالترتيب التالي:

خصائص النظام
JVM التابعة (منصة مستقلة)
بيئة النظام أو المتغيرات
محيط
يعتمد على التشغيل
النظام (يعتمد النظام الأساسي)
إعدادات مستوى التطبيق
المعرفة في
application.properties



/ heapdump

نقطة النهاية heapdump تفريغ كومة التطبيق. تقوم نقطة النهاية هذه بإرجاع البيانات الثنائية بتنسيق HPROF. نظرًا لأنه يتم عادةً إرجاع الكثير من البيانات ، يجب عليك حفظها وتحليلها.

/ قطع الاشجار

توفر loggers التطبيق معلومات حول مستوى السجل الذي تم تكوينه (ConfigLevel) والمستوى الفعال (الفعال المستوى). إذا لم يتم تحديد المستوى الذي تم تكوينه للمسجل ولأصله (فارغ) ، فسيكون مستوى مسجل الجذر مستوى فعال.

تشير خاصية level إلى مستويات التسجيل التي يدعمها إطار التسجيل.



للحصول على معلومات عن مسجل معين ، مرر اسم (معرف) المسجل في عنوان URL بعد /loggers ، كما هو موضح أدناه:

http: // localhost: 8080 / مشغل / قطع الاشجار / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication



/ المقاييس

تُظهر نقطة نهاية metrics جميع المقاييس التي يمكنك تتبعها لتطبيقك.



التحقق من المقاييس الفردية

يمكنك مشاهدة مقياس واحد عن طريق تمريره في url after /metrics ، كما هو موضح أدناه:

http: // localhost: 8080 / المحرك / المقاييس / jvm.memory.used



مراجع

docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
docs.spring.io/spring-boot/docs/current/actuator-api/html

وفقًا للتقاليد المعمول بها ، ننتظر تعليقاتكم وندعو الجميع إلى اليوم المفتوح ، الذي سيعقد في 23 مايو.

Source: https://habr.com/ru/post/ar452624/


All Articles