تحدد خصائص الخدمات المجهرية أن نشر الوحدات الوظيفية يتم توزيعه. تعمل معظم الوحدات الوظيفية على أجهزة مختلفة وتتفاعل مع بعضها البعض من خلال مكالمات الخدمة. ستتم معالجة وتدفق العمل في المكتب الأمامي والخلفي ويتم تمريره بواسطة العديد من الخدمات المجهرية. كيفية تحديد موقع الاستثناءات بسرعة؟ أي رابط لديه مشكلة؟
بموجب هذا الإطار ، فإن مراقبة الخدمات الدقيقة مهمة بشكل خاص. تجمع هذه المقالة بشكل أساسي بين مشغل Boot Spring لمشاركتك في الاستخدام الشائع لمشغل Boot Microservice Spring ، حتى نتمكن من مراقبة الخدمات الصغيرة لدينا في الحياة اليومية.
مراقبة المشغل
يستخدم Spring Boot مفهوم "العادات أفضل من التكوين" ويستخدم مسح الحزمة وآليات التكوين الآلي لتحميل حبوب الربيع التي تعتمد على الجرار. لا يتطلب أي تكوين XML لتنفيذ جميع تكوينات الربيع. على الرغم من أن القيام بذلك يجعل الكود الخاص بنا موجزًا للغاية ، إلا أن المعلومات مثل إنشاء المثيلات وتبعيات التطبيق بأكملها منفصلة عن توضيحات فئات التكوين المختلفة ، مما يجعل من الصعب للغاية علينا تحليل العلاقات المختلفة بين الموارد والحالات في التطبيق بأكمله.
Actuator هو وظيفة متكاملة للتأمل ومراقبة أنظمة التطبيق التي توفرها SPRING BOOT. يمكنك عرض معلومات مفصلة عن تكوين التطبيق ، مثل معلومات التكوين الآلية ، وحبوب الربيع التي تم إنشاؤها ، وبعض الخصائص البيئية.
يمكن إجراء مراقبة المشغل عن طريق إضافة التبعيات التالية
<ependencies> <Rependency> <roupiD> org.springframework.boot </rougiD> <Stifactid> spring-boot-starter-web </sntifactid> </reperence> <redenced> <roupiD> org.springframework.boot </groupid> <roupl> org.springframework.boot </groupId> <StifactId> Spring-Boot-Starter-Security </shintifactid> </reperence> </
من أجل ضمان أمان واجهة المراقبة المكشوفة من قبل المشغل ، من الضروري إضافة تبعيات التحكم في الأمن التبعيات في فصل الربيع. عند الوصول إلى نقاط نهاية مراقبة التطبيق ، يلزم وجود معلومات التحقق. تبعيات الأمن ، يمكنك اختيار عدم إضافة أو إدارة الأمان ، ولكن لا ينصح به.
واجهة راحة المحرك
تنقسم مراقبة المشغل إلى فئتين: نقاط النهاية الأصلية ونقاط النهاية المعرفة من قبل المستخدم ؛ نقاط النهاية المخصصة تشير أساسا إلى قابلية التوسع. يمكن للمستخدمين تحديد بعض المؤشرات المعنية بناءً على تطبيقاتهم الفعلية ومراقبتها أثناء وقت التشغيل.
توفر نقاط النهاية الأصلية العديد من واجهات الويب في التطبيقات لفهم الحالة الداخلية لوقت تشغيل التطبيق. يمكن تقسيم نقاط النهاية الأصلية إلى ثلاث فئات:
يوفر المشغل 13 واجهات ، كما هو موضح في الجدول التالي.
| أساليب HTTP | طريق | يصف |
|---|---|---|
| يحصل | /autoconfig | يتم توفير تقرير التكوين التلقائي لتسجيل شروط التكوين التلقائية التي تم تمريرها والتي لم يتم تمريرها. |
| يحصل | /configprops | صف كيفية حقن الفاصوليا بخصائص التكوين (بما في ذلك القيم الافتراضية) |
| يحصل | /فول | صف جميع الفاصوليا في سياق التطبيق وعلاقتها |
| يحصل | /أحمق | احصل على لقطة من نشاط الموضوع |
| يحصل | /بيئة | احصل على جميع سمات البيئة |
| يحصل | /env/{name} | احصل على قيم سمة بيئة محددة بناءً على الاسم |
| يحصل | /صحة | تقارير المقاييس الصحية للتطبيق ، يتم توفير هذه القيم من قبل فئة تنفيذ HealthIndicator |
| يحصل | /معلومات | احصل على معلومات مخصصة للتطبيق ، والتي يتم توفيرها بالسمات التي ترأسها معلومات |
| يحصل | /تعيينات | صف جميع مسارات URI وعلاقة التعيين الخاصة بها مع وحدة التحكم (بما في ذلك نقاط نهاية المشغل) |
| يحصل | /مقاييس | الإبلاغ عن العديد من مقاييس التطبيق ، مثل استخدام الذاكرة وعدد طلب HTTP |
| يحصل | /مقاييس/{name} | تقارير القيمة مقياس التطبيق للاسم المحدد |
| بريد | /اغلق | أغلق التطبيق ويتطلب endpoints.shutdown.Endability ليتم ضبطه على صحيح |
| يحصل | /يتعقب | توفير معلومات تتبع طلب HTTP الأساسية (Timestamp ، HTTP Header ، وما إلى ذلك) |
ابدأ بسرعة
التكوينات ذات الصلة
تبعية المشروع
<ependencies> <Rependency> <roupiD> org.springframework.boot </rougiD> <Stifactid> spring-boot-starter-web </sntifactid> </reperence> <redenced> <roupiD> org.springframework.boot </groupid> </premency> </تبعيات>
ملف التكوين
الخادم: المنفذ: 8080Management: الأمان: ممكّن: False #Switch Off Security ، يتم ضبط منفذ المصادقة الأمان: 8088 #Admin Port على 8088 مسار سياق: /Monitor #Actuator Access Path Endoints: SHAPDDOW
بعد اكتمال التكوين ، يمكن بدء المشروع ويمكنك الاستمرار في التحقق من وظائف المراقبة المختلفة.
شرح مفصل للأمر
AutoConfig
تعد وظيفة التكوين التلقائي في Spring Boot مريحة للغاية ، ولكن في بعض الأحيان تعني أيضًا أنه من الصعب معرفة السبب المحدد عندما تكون هناك مشكلة. استخدم AutoConFig لعرض الشروط التي يدفعها تكوين معين أثناء تشغيل وقت تشغيل التطبيق ، أو لماذا لا يسري التكوين التلقائي.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/autoconfig. جزء العودة من المعلومات كما يلي:
{"positivematches": {"devtoolsdatasourCeautoConfiguration": {"notmatched": [{"condition": "devtoolsdatasourceaeautoconfiguration.devtoolsdatasourcondition" ، "message": } ، "remotedevtoolsautoConfiguration": {"notmatched": [{"الشرط": "OnPropertyCondition" ، "الرسالة": "conditionalonproperty (spring.devtools.remote.secret) "conditionalonclass وجدت الفئات المطلوبة" javax.servlet.filter "، 'org.springframework.http.server.serverhttprequest' ؛ @conditionalonmissingclass لم تجد فئة غير مرغوب فيها"}}}}}}}}}}}}}}}التكوين
عرض محتوى الخصائص المحددة في ملف التكوين ، وكذلك القيم الافتراضية لبعض خصائص التكوين.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/configprops. جزء العودة من المعلومات كما يلي:
{... "بيئة endendingpoint": {"prefix": "endpoints.env" ، "الخصائص": {"id": "env" ، "حساس": صحيح ، "تمكين": true}} ، "spring.http.multipart" ، "الخصائص": {"MaxRequestSize": "10MB" ، "filesizethreshold": "0" ، "location": null ، "الخصائص": {"id": "info" ، "حساس": خطأ "،" تمكين ": TRUE}} ...}فول
من المثال ، يمكننا أن نرى أن الاسم المستعار للفول ، النوع ، سواء تم عرض Singleton أو عنوان الفصل والاعتماد والمعلومات الأخرى.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/beans. جزء العودة من المعلومات كما يلي:
[{"Context": "Application: 8080: Management" ، "Parent": "Application: 8080" ، "Beans": [{"bean": "org.springframework.boot.context.embedded.tomcat.tomcatembeddedServletContainerFactory" ، "Resource": "null" ، "rependencies": [] []} ، "org.springframework.boot.actuate.autoconfigure.endpointWebMvCchildContextConfiguration $$ ensancerByspringCglib $$ A4A10F9D" ، "Resource": "Null" ، "Tendencies": []}}]أحمق
ستقوم واجهة /تفريغ بإنشاء لقطة لنشاط مؤشر الترابط الحالي. هذه الوظيفة جيدة جدًا ، مما يجعلها مريحة بالنسبة لنا للتحقق من موقف الخيط عندما نحدد مشاكل في الحياة اليومية. يعرض المعلومات بشكل أساسي مثل اسم مؤشر الترابط ، معرف مؤشر الترابط ، حالة مؤشر الترابط ، سواء كانت تنتظر موارد القفل.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/dump. جزء العودة من المعلومات كما يلي:
[{"threadname": "http-nio-8088-exec-6" ، "threadId": 49 ، "lockedtime": -1 ، "lockedcount": 0 ، "lockownerid": -1 ، "lockownername": null ، "innative": false ، "spared": false ، } ، {"methodname": "park" ، "filename": "locksupport.java" ، "Linenumber": 175 ، "classname": "Linenumber": 2039 ، "classname": "java.util.concurrent.threadpoolexecutor" ، "nativemethod": false} ، {"methodname": "Runworker" ، "filename": "througpoolexecutor.java" ، "linenumble": 1127 ، "classname: false} ، {"methodname": "Run" ، "filename": "TaskThread.java" ، "Linenumber": 61 ، "className": "org.apache.tomcat.util.threads.taskthread $ wrapphrunnable" ، "nativemethod": false} ، {"methodname": "run" ، "java.lang.thread" ، "nativemethod": false}] ، "lockedmonitors": [] ، "lockedsynchronizers": [] ، ...]البيئة
يعرض معلومات التكوين لمتغيرات بيئة النظام ، بما في ذلك متغيرات البيئة المستخدمة ، وخصائص JVM ، ومعلمات سطر الأوامر ، وحزم جرة المستخدمة من قبل المشروع ، وما إلى ذلك ، على عكس التهيئة ، تركز Configprops على معلومات التكوين ، بينما تركز ENV على معلومات البيئة التشغيلية.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/env. جزء العودة من المعلومات كما يلي:
{"Profiles": [] ، "server.ports": {"local.management.port": 8088 ، "local.server.port": 8080} ، "servletcontextinitparams": {} ، "Java (TM) SE Runtime Environment" ، "spring.output.ansi.endabled": "دائمًا" ، "sun.boot.library.path": "C: // program files // java // jdk1.8.0_101 // jre // bin" ، "java.vendor.url": "http://java.oracle.com/" ، "java.rmi.server.randomids": "true" ، "path.separator": "؛" ، " "user.country": "cn" ، "user.script": "" ، "sun.java.launcher": "sun_standard" ، آلة الجهازلتجنب المعلومات الحساسة التي تتعرض لـ /env ، سيتم إضافة جميع السمات المسمى كلمة المرور أو السر أو المفتاح (أو الفقرة الأخيرة من الاسم) إلى /env مع "*". على سبيل المثال ، إذا كان هناك قاعدة بيانات اسم خاصية.
"database.password": "******"
استخدام /env /{name}
وهذا يعني أن امتداد ENV يمكن أن يحصل على معلومات التكوين المحددة ، مثل: http: // localhost: 8088/envor/env/java.vm.version ، return: {"java.vm.version": "25.101-B13"}
صحة
يمكنك أن ترى أن HealthEndPoint يوفر لنا نتائج المراقبة الافتراضية ، بما في ذلك اكتشاف القرص واكتشاف قاعدة البيانات
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/Health يعيد جزء من المعلومات ، تتكون استجابة JSON التالية من حالة ومساحة القرص و db. يصف الحالة الصحية العامة للتطبيق ، يشير UP إلى أن التطبيق صحي. يصف مساحة القرص مساحة القرص الكلية ، ومساحة القرص المتبقية والحد الأدنى من العتبة. عتبة Application.Properties قابلة للتكوين
{"الحالة": "UP" ، "Diskspace": {"الحالة": "UP" ، "Total": 209715195904 ، "Free": 183253909504 ، "Threshold": 10485760} "db": {"status:" up "،في الواقع ، بالنظر إلى رمز مصدر التمثيل الصوتي للبلاغ ، ستجد أن المعلومات المقدمة من HealthEndPoint لا تقتصر على ذلك. تحت org.springframework.boot.actuate.health package ، ستجد ElasticsearchHealthIndicator ، RedishealthIndicator ، RabbithealthIndicator ، إلخ.
معلومات
المعلومات هي معلومات التكوين التي نقوم بتكوينها في ملف التكوين بدءًا من المعلومات. على سبيل المثال ، تكويننا في مشروع المثال هو:
معلومات: التطبيق: الاسم: Spring-Boot-Actuator الإصدار: 1.0.0
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/info جزء الإرجاع من المعلومات كما يلي:
{"App": {"Name": "Spring-Boot-Actuator" ، "الإصدار": "1.0.0"}}تعيينات
صف جميع مسارات URI وعلاقة التعيين مع وحدة التحكم
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/maptings. جزء العودة من المعلومات كما يلي:
{"/**/favicon.ico": {"Bean": "FaviconHandLermapping"} ، "{[/hello]}": {"Bean": "requestMappingHandLermapping" ، "Method": "/"//error ": "Bean": "requestMappingHandLermapping" ، "Method": "public org.springframework.http.sponseentity <java.util.map <java.lang.string ، java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorcontroller.error (javax.servlet.http.httpservletrequest) "}}المقاييس
واحدة من أهم محتويات المراقبة هي مراقبة استخدام محتوى JVM بشكل أساسي ، وموقف GC ، ومعلومات تحميل الفصل ، إلخ.
ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/metrics. جزء العودة من المعلومات كما يلي:
{"mem": 337132 ، "mem.free": 183380 ، "المعالجات": 4 ، "مثيل. 1827840 ، "nonheap.committed": 45248 ، "nonheap.init": 2496 ، "nonheap.used: 44269 ،" nonheap ": 0 ،" threads.peak ": 63 ،" threads.daemon ": 43 ، "classes.unloaded": 6357 ، "classes.unloaded": 0 ، "gc.ps_scavenge.count": 8 ،يتم تصنيف المعلومات التي توفرها واجهة /مقاييس ببساطة على النحو التالي:
| تصنيف | بادئة | الإبلاغ عن المحتوى |
|---|---|---|
| جامع القمامة | GC.* | عدد مجموعات القمامة التي حدثت والوقت الذي تقضيه في جمع القمامة مناسب لهواة جمع القمامة في تنظيف العلامات وجامعي القمامة المتوازيين (البيانات التي نشأت من java.lang.Management. Garbagecollectormxbean) |
| ذاكرة | ميم.* | كمية الذاكرة المخصصة للتطبيق ومبلغ الذاكرة الحرة (البيانات التي نشأت من java.lang. وقت التشغيل) |
| كومة | كومة.* | استخدام الذاكرة الحالي (البيانات التي نشأت من java.lang.management.memoryusage) |
| تحميل فئة | فصول.* | عدد الفئات التي تم تحميلها وتفريغها بواسطة تحميل فئة JVM (البيانات التي نشأت من Java.lang. Management.ClassloadingMxbean) |
| نظام | المعالجات ، مثيل. | معلومات النظام ، مثل عدد المعالجات (البيانات التي نشأت من java.lang.runtime) ، وقت التشغيل (البيانات التي نشأت من java.lang.management.runtimemxbean) ، متوسط التحميل (البيانات التي نشأت من java.lang.management.operatingsystemmxbean) |
| بركة الموضوع | خيط.* | عدد مؤشرات الترابط ، وخيوط الخفي ، وعدد ذروة الخيوط بعد بدء تشغيل JVM (البيانات التي نشأت من java.lang.management.threadmxbean) |
| مصدر البيانات | مصدر البيانات.* | عدد اتصالات مصدر البيانات (البيانات الوصفية من مصدر البيانات ، فقط في حالة وجود فاصوليا البيانات في سياق تطبيق الربيع) |
| جلسة Tomcat | httpsessions.* | رقم الجلسة النشط لـ Tomcat ورقم الجلسة القصوى (تأتي البيانات من حبوب Tomcat المدمجة ، والتي تتوفر فقط عند تشغيل التطبيق باستخدام خادم Tomcat المضمن) |
| http | Counter.Status. ، Gauge.Response. | تدابير وعدادات لطلبات HTTP لمختلف خدمات التطبيق |
توضيح:
اغلق
قم بتشغيل الواجهة وإغلاق تطبيق Boot Spring بأناقة. لاستخدام هذه الوظيفة ، يجب أولاً تمكينها في ملف التكوين:
نقاط النهاية: الإغلاق: ممكّن: صحيح
بعد الانتهاء من التكوين ، ابدأ عينة مشروع وزيارة: http: // localhost: 8088/monitor/showddown return جزء من المعلومات كما يلي:
{"رسالة": "إيقاف تشغيل ، وداعا ..."}في هذه المرحلة ستجد أن التطبيق قد تم إغلاقه.
يتعقب
يمكن للواجهة /تتبع الإبلاغ عن المعلومات التفصيلية لجميع طلبات الويب ، بما في ذلك أساليب الطلب والمسارات والطابع الزمني ومعلومات رأس الطلب والاستجابة ، وتسجيل المعلومات التفصيلية لكل طلب.
ابدأ مشروع العينة ، قم بزيارته أولاً: http: // localhost: 8080/hello ، ثم قم بتنفيذه في المتصفح: http: // localhost: 8088/monitor/trace عرض معلومات الإرجاع:
[{"timestamp": 1516780334777 ، "info": {"method": "get" ، "path": NT 10.0 ؛ "Text/HTML ، Application/XHTML+XML ، Application/XML ؛ "um_distinctid = 16053BA344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751 ؛ HM_LVT_0FB30C642C5F6453F17D881F529A1141 = 1513076406،1514961720،1515649377 ؛ HM_LVT_6D8E8BB59814010152D98507A18AD229 = 1515247964،1515296008،1515672972،1516086283 "} ،" الاستجابة ": {" "text/html ؛ charset = utf-8" ، "content-length": "11" ، "Date": "Wed ، 24 Jan 2018 07:52:14 GMT" ، "status": "200"}} ، "Timetaken": "4"}}]تعرض المعلومات أعلاه تفاصيل طلب /Hello.
تكوينات أخرى
قيود على الوصول إلى المعلومات الحساسة
وفقًا للجدول أعلاه ، إذا كانت المصادقة خاطئة ، فهذا يعني أنها غير حساسة ويمكن الوصول إليها حسب الرغبة. خلاف ذلك ، سيتم حمايتها ولا يمكن الوصول إليها حسب الرغبة.
endpoints.mappings.Sevelitive = false
هذا يتطلب إعداد كل واحد ، وهو أمر أكثر إثارة للقلق. تتطلب الطريقة الحساسة للمستخدم أن يكون لدور المشغل افتراضيًا ، بحيث يمكنك أيضًا تعيين قيود الأمان على OFF:
management.security.enabled = false
أو تعاون مع أمن الربيع للتحكم في الرفقات الدقيقة.
تمكين وتعطيل الواجهات
على الرغم من أن واجهات المشغل مفيدة ، إلا أنك لا تحتاج بالضرورة إلى جميعها. بشكل افتراضي ، يتم تمكين جميع الواجهات (باستثناء /إيقاف). على سبيل المثال ، لتعطيل واجهة /مقاييس ، يمكنك تعيينها على النحو التالي:
endpoints.metrics.Enabled = false
إذا كنت ترغب فقط في فتح واجهات أو اثنين من الواجهات ، فتعطق جميع الواجهات أولاً ، ثم تمكين تلك القلة التي تريدها ، والتي تكون أكثر ملاءمة.
endpoints.endabled = falseendpoints.metrics.enabled = true
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.