{"id":89946,"date":"2025-07-31T23:37:03","date_gmt":"2025-07-31T16:37:03","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=89946"},"modified":"2025-07-31T23:37:05","modified_gmt":"2025-07-31T16:37:05","slug":"spring-boot-actuator-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/","title":{"rendered":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Spring_Boot_Actuator_la_gi\" >Spring Boot Actuator l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Co_che_hoat_dong_cua_Spring_Boot_Actuator\" >C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Spring Boot Actuator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Cac_endpoint_quan_trong_nhat_trong_Spring_Boot_Actuator\" >C\u00e1c endpoint quan tr\u1ecdng nh\u1ea5t trong Spring Boot Actuator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Bat_dau_voi_Spring_Boot_Actuator_Cai_dat_va_Cau_hinh\" >B\u1eaft \u0111\u1ea7u v\u1edbi Spring Boot Actuator: C\u00e0i \u0111\u1eb7t v\u00e0 C\u1ea5u h\u00ecnh<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Bao_mat_cho_Actuator_endpoint\" >B\u1ea3o m\u1eadt cho Actuator endpoint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Cac_thao_tac_nang_cao_Tich_hop_voi_Prometheus_va_Grafana\" >C\u00e1c thao t\u00e1c n\u00e2ng cao: T\u00edch h\u1ee3p v\u1edbi Prometheus v\u00e0 Grafana<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Cac_cau_hoi_thuong_gap_ve_Spring_Boot_Actuator\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Spring Boot Actuator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Khi m\u1ed9t \u1ee9ng d\u1ee5ng Spring Boot \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean m\u00f4i tr\u01b0\u1eddng production, l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 b\u1ea1n bi\u1ebft n\u00f3 \u0111ang ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh, hi\u1ec7u su\u1ea5t ra sao, hay c\u00e1c c\u1ea5u h\u00ecnh \u0111\u00e3 ch\u00ednh x\u00e1c ch\u01b0a? \u0110\u00e2y ch\u00ednh l\u00e0 l\u00fac Spring Boot Actuator ph\u00e1t thay th\u1ebf m\u1ea1nh c\u1ee7a m\u00ecnh. B\u00e0i vi\u1ebft sau s\u1ebd gi\u00fap b\u1ea1n hi\u1ec3u r\u00f5 Spring Boot Actuator l\u00e0 g\u00ec &#8211; m\u1ed9t c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean v\u00e0 DevOps t\u1ef1 tin h\u01a1n khi v\u1eadn h\u00e0nh \u1ee9ng d\u1ee5ng trong m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf.<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft n\u00e0y \u0111\u1ec3 hi\u1ec3u r\u00f5:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Spring Boot Actuator ho\u1ea1t \u0111\u1ed9ng th\u1ebf n\u00e0o? Mang l\u1ea1i l\u1ee3i \u00edch g\u00ec?<\/li>\n\n\n\n<li>C\u00e1c endpoint quan tr\u1ecdng trong Spring Boot Actuator<\/li>\n\n\n\n<li>C\u00e1ch c\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh Spring Boot Actuator<\/li>\n\n\n\n<li>C\u00e1c ph\u01b0\u01a1ng ph\u00e1p b\u1ea3o m\u1eadt cho c\u00e1c endpoints<\/li>\n\n\n\n<li>C\u00e1c thao t\u00e1c n\u00e2ng cao v\u1edbi Spring Boot Actuator<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-spring-boot-actuator-la-gi\"><span class=\"ez-toc-section\" id=\"Spring_Boot_Actuator_la_gi\"><\/span><strong>Spring Boot Actuator l\u00e0 g\u00ec?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Hi\u1ec3u m\u1ed9t c\u00e1ch \u0111\u01a1n gi\u1ea3n, <strong>Spring Boot Actuator<\/strong> l\u00e0 m\u1ed9t sub-project (d\u1ef1 \u00e1n con) c\u1ee7a <a href=\"https:\/\/itviec.com\/blog\/spring-boot-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot<\/a>, \u0111\u01b0\u1ee3c sinh ra \u0111\u1ec3 b\u1ed5 sung c\u00e1c t\u00ednh n\u0103ng h\u1ed7 tr\u1ee3 tri\u1ec3n khai v\u00e0 v\u1eadn h\u00e0nh trong m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf (production) cho \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n. Khi t\u00edch h\u1ee3p Actuator, n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra c\u00e1c <strong>endpoint<\/strong> (\u0111i\u1ec3m truy c\u1eadp) d\u01b0\u1edbi d\u1ea1ng API (th\u01b0\u1eddng l\u00e0 REST) \u0111\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 gi\u00e1m s\u00e1t v\u00e0 t\u01b0\u01a1ng t\u00e1c v\u1edbi \u1ee9ng d\u1ee5ng \u0111ang ch\u1ea1y.<\/p>\n\n\n\n<p>S\u1eed d\u1ee5ng Actuator mang l\u1ea1i nhi\u1ec1u l\u1ee3i \u00edch thi\u1ebft th\u1ef1c, gi\u00fap vi\u1ec7c v\u1eadn h\u00e0nh \u1ee9ng d\u1ee5ng tr\u1edf n\u00ean \u0111\u01a1n gi\u1ea3n v\u00e0 minh b\u1ea1ch h\u01a1n r\u1ea5t nhi\u1ec1u.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-c\u01a1-ch\u1ebf-ho\u1ea1t-d\u1ed9ng-c\u1ee7a-spring-boot-actuator\"><span class=\"ez-toc-section\" id=\"Co_che_hoat_dong_cua_Spring_Boot_Actuator\"><\/span><strong>C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Spring Boot Actuator<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ed1t l\u00f5i c\u1ee7a <strong>Spring Boot Actuator<\/strong> r\u1ea5t \u0111\u01a1n gi\u1ea3n. Khi b\u1ea1n th\u00eam th\u01b0 vi\u1ec7n Actuator v\u00e0o d\u1ef1 \u00e1n, n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng qu\u00e9t v\u00e0 c\u1ea5u h\u00ecnh m\u1ed9t lo\u1ea1t c\u00e1c <strong>endpoint <\/strong>b\u00ean trong \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"333\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84.png\" alt=\"\" class=\"wp-image-89949\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84.png 800w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84-300x125.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84-640x266.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84-200x83.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84-768x320.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-84-1536x639.png 1536w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>H\u00ecnh \u1ea3nh tr\u00ean m\u00f4 t\u1ea3 ki\u1ebfn tr\u00fac ho\u1ea1t \u0111\u1ed9ng c\u1ee7a m\u1ed9t \u1ee9ng d\u1ee5ng Spring Boot s\u1eed d\u1ee5ng Spring Boot Actuator v\u1edbi c\u00e1c th\u00e0nh ph\u1ea7n ch\u00ednh nh\u01b0 sau:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Application Endpoin<\/strong>t: \u0110\u1ecba ch\u1ec9 (URL) m\u00e0 ng\u01b0\u1eddi d\u00f9ng t\u1eeb Internet s\u1eed d\u1ee5ng \u0111\u1ec3 truy c\u1eadp \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n&nbsp;<\/li>\n\n\n\n<li><strong>Spring Boot Actuato<\/strong>r: Th\u00e0nh ph\u1ea7n trung t\u00e2m c\u00f3 nhi\u1ec7m v\u1ee5 nh\u1eadn y\u00eau c\u1ea7u {serves} t\u1eeb c\u00e1c endpoint v\u00e0 sau \u0111\u00f3 x\u1eed l\u00fd {runs} ch\u1ea1y tr\u00ean 1 m\u00e1y ch\u1ee7 t\u1eadp trung c\u0169ng nh\u01b0 nh\u1eadn c\u1ea3nh b\u00e1o {alert} c\u00e1c l\u1ed7i trong qu\u00e1 tr\u00ecnh x\u1eed l\u00fd t\u1eeb <strong>Spring Boot Actuator Gateway<\/strong> (m\u1ed9t trung t\u00e2m gi\u00e1m s\u00e1t ho\u1ea1t \u0111\u1ed9ng&nbsp; c\u1ee7a h\u1ec7 th\u1ed1ng).<\/li>\n\n\n\n<li><strong>Spring Boot-VM-test<\/strong>: M\u00e1y ch\u1ee7 \u1ea3o (Virtual Machine) n\u01a1i \u1ee9ng d\u1ee5ng Spring Boot c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t v\u00e0 \u0111ang ch\u1ea1y \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi Amazon<\/li>\n<\/ul>\n\n\n\n<p>M\u1ed7i endpoint \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 th\u1ef1c hi\u1ec7n m\u1ed9t nhi\u1ec7m v\u1ee5 gi\u00e1m s\u00e1t ho\u1eb7c qu\u1ea3n l\u00fd c\u1ee5 th\u1ec3. Ch\u00fang \u0111\u01b0\u1ee3c &#8220;ph\u01a1i b\u00e0y&#8221; (expose) ra ngo\u00e0i th\u00f4ng qua hai giao th\u1ee9c ch\u00ednh:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>HTTP\/HTTPS<\/strong>: \u0110\u00e2y l\u00e0 c\u00e1ch ph\u1ed5 bi\u1ebfn nh\u1ea5t. Actuator t\u1ea1o ra c\u00e1c URL m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp b\u1eb1ng tr\u00ecnh duy\u1ec7t ho\u1eb7c c\u00e1c c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh nh\u01b0 cURL. V\u00ed d\u1ee5, truy c\u1eadp v\u00e0o <code>http:\/\/your-app\/actuator\/health<\/code> s\u1ebd tr\u1ea3 v\u1ec1 th\u00f4ng tin s\u1ee9c kh\u1ecfe c\u1ee7a \u1ee9ng d\u1ee5ng d\u01b0\u1edbi d\u1ea1ng JSON.<\/li>\n\n\n\n<li><strong>JMX (Java Management Extensions)<\/strong>: \u0110\u1ed1i v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 gi\u00e1m s\u00e1t chuy\u00ean d\u1ee5ng h\u01a1n nh\u01b0 JConsole ho\u1eb7c VisualVM, b\u1ea1n c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i v\u00e0 qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng th\u00f4ng qua c\u00e1c MBean (Managed Beans) m\u00e0 Actuator \u0111\u00e3 \u0111\u0103ng k\u00fd.<\/li>\n<\/ol>\n\n\n\n<p>Khi m\u1ed9t y\u00eau c\u1ea7u \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn m\u1ed9t endpoint c\u1ee7a Actuator, n\u00f3 s\u1ebd thu th\u1eadp d\u1eef li\u1ec7u t\u01b0\u01a1ng \u1ee9ng t\u1eeb b\u00ean trong Application Context c\u1ee7a Spring (v\u00ed d\u1ee5: th\u00f4ng tin v\u1ec1 beans, c\u1ea5u h\u00ecnh, tr\u1ea1ng th\u00e1i k\u1ebft n\u1ed1i) v\u00e0 tr\u1ea3 v\u1ec1 cho ng\u01b0\u1eddi d\u00f9ng. Nh\u1edd c\u01a1 ch\u1ebf n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 &#8220;nh\u00ecn&#8221; s\u00e2u v\u00e0o b\u00ean trong \u1ee9ng d\u1ee5ng \u0111ang ch\u1ea1y m\u1ed9t c\u00e1ch an to\u00e0n v\u00e0 c\u00f3 ki\u1ec3m so\u00e1t.<\/p>\n\n\n\n<p>\u0110\u1ec3 hi\u1ec3u th\u00eam v\u1ec1 c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Spring Boot Actuator, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecdc b\u00e0i blog n\u00e0y: <a href=\"https:\/\/medium.com\/@AlexanderObregon\/the-mechanics-behind-spring-boot-actuator-metrics-configuration-a91ce587f2ea\" target=\"_blank\" rel=\"noreferrer noopener\">The mechanics behind Spring Boot Actuator metrics configuration<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-nbsp-l\u1ee3i-ich-chinh-khi-s\u1eed-d\u1ee5ng-actuator\"><strong>&nbsp;L\u1ee3i \u00edch ch\u00ednh khi s\u1eed d\u1ee5ng Actuator<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gi\u00e1m s\u00e1t \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh ho\u1ea1t \u0111\u1ed9ng c\u1ee7a \u1ee9ng d\u1ee5ng v\u00e0 h\u1ec7 th\u1ed1ng (Health Checks) :<\/strong> \u0110\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng t\u00ednh n\u0103ng quan tr\u1ecdng nh\u1ea5t. Actuator cung c\u1ea5p m\u1ed9t endpoint \/health gi\u00fap b\u1ea1n ki\u1ec3m tra nhanh tr\u1ea1ng th\u00e1i t\u1ed5ng th\u1ec3 c\u1ee7a \u1ee9ng d\u1ee5ng. Kh\u00f4ng ch\u1ec9 d\u1eebng l\u1ea1i \u1edf vi\u1ec7c b\u00e1o &#8220;UP&#8221; hay &#8220;DOWN&#8221;, n\u00f3 c\u00f2n c\u00f3 th\u1ec3 ki\u1ec3m tra t\u00ecnh tr\u1ea1ng k\u1ebft n\u1ed1i t\u1edbi c\u00e1c th\u00e0nh ph\u1ea7n ph\u1ee5 thu\u1ed9c nh\u01b0 <strong>database<\/strong>, <strong>message queue<\/strong>, hay c\u00e1c d\u1ecbch v\u1ee5 b\u00ean ngo\u00e0i kh\u00e1c.<\/li>\n\n\n\n<li><strong>Thu th\u1eadp v\u00e0 theo d\u00f5i s\u1ed1 li\u1ec7u (Metrics):<\/strong> B\u1ea1n c\u1ea7n bi\u1ebft \u1ee9ng d\u1ee5ng \u0111ang d\u00f9ng bao nhi\u00eau b\u1ed9 nh\u1edb, CPU ho\u1ea1t \u0111\u1ed9ng \u1edf m\u1ee9c n\u00e0o, hay c\u00f3 bao nhi\u00eau request HTTP \u0111\u00e3 \u0111\u01b0\u1ee3c x\u1eed l\u00fd? Endpoint \/metrics s\u1ebd cung c\u1ea5p t\u1ea5t c\u1ea3 c\u00e1c s\u1ed1 li\u1ec7u chi ti\u1ebft n\u00e0y. Vi\u1ec7c t\u00edch h\u1ee3p v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t nh\u01b0 Prometheus hay Grafana c\u0169ng tr\u1edf n\u00ean v\u00f4 c\u00f9ng d\u1ec5 d\u00e0ng, gi\u00fap b\u1ea1n c\u00f3 m\u1ed9t c\u00e1i nh\u00ecn tr\u1ef1c quan v\u1ec1 hi\u1ec7u su\u1ea5t h\u1ec7 th\u1ed1ng theo th\u1eddi gian.<\/li>\n\n\n\n<li><strong>Qu\u1ea3n l\u00fd linh ho\u1ea1t ngay khi ch\u1ea1y:<\/strong> M\u1ed9t s\u1ed1 endpoint c\u1ee7a Actuator cho ph\u00e9p b\u1ea1n t\u01b0\u01a1ng t\u00e1c v\u00e0 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i c\u1ee7a \u1ee9ng d\u1ee5ng m\u00e0 kh\u00f4ng c\u1ea7n kh\u1edfi \u0111\u1ed9ng l\u1ea1i. V\u00ed d\u1ee5, b\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i m\u1ee9c \u0111\u1ed9 log (logging level) c\u1ee7a m\u1ed9t package c\u1ee5 th\u1ec3 ngay l\u1eadp t\u1ee9c \u0111\u1ec3 debug m\u1ed9t v\u1ea5n \u0111\u1ec1 m\u00e0 kh\u00f4ng l\u00e0m gi\u00e1n \u0111o\u1ea1n d\u1ecbch v\u1ee5.<\/li>\n\n\n\n<li><strong>T\u0103ng c\u01b0\u1eddng kh\u1ea3 n\u0103ng ch\u1ea9n \u0111o\u00e1n l\u1ed7i (Diagnostics):<\/strong> Khi c\u00f3 s\u1ef1 c\u1ed1, vi\u1ec7c truy c\u1eadp v\u00e0o c\u00e1c th\u00f4ng tin nh\u01b0 c\u1ea5u h\u00ecnh m\u00f4i tr\u01b0\u1eddng \u0111ang \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng (\/env), c\u00e1c bean \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o trong h\u1ec7 th\u1ed1ng (\/beans), hay d\u1ea5u v\u1ebft c\u1ee7a c\u00e1c request HTTP g\u1ea7n nh\u1ea5t (\/httptrace) l\u00e0 c\u1ef1c k\u00ec quan tr\u1ecdng. Actuator gi\u00fap b\u1ea1n truy xu\u1ea5t nh\u1eefng th\u00f4ng tin n\u00e0y m\u1ed9t c\u00e1ch nhanh ch\u00f3ng, r\u00fat ng\u1eafn \u0111\u00e1ng k\u1ec3 th\u1eddi gian t\u00ecm ra nguy\u00ean nh\u00e2n g\u1ed1c r\u1ec5 c\u1ee7a v\u1ea5n \u0111\u1ec1.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-endpoint-quan-tr\u1ecdng-nh\u1ea5t-trong-spring-boot-actuator\"><span class=\"ez-toc-section\" id=\"Cac_endpoint_quan_trong_nhat_trong_Spring_Boot_Actuator\"><\/span><strong>C\u00e1c endpoint quan tr\u1ecdng nh\u1ea5t trong Spring Boot Actuator<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Spring Boot Actuator cung c\u1ea5p m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c endpoint m\u1ea1nh m\u1ebd \u0111\u1ec3 gi\u00e1m s\u00e1t v\u00e0 qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng endpoint quan tr\u1ecdng nh\u1ea5t:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Endpoint<\/strong><\/td><td><strong>Ch\u1ee9c n\u0103ng<\/strong><\/td><\/tr><tr><td><code>\/actuator<\/code><\/td><td>Endpoint g\u1ed1c, li\u1ec7t k\u00ea t\u1ea5t c\u1ea3 c\u00e1c endpoint kh\u00e1c \u0111ang ho\u1ea1t \u0111\u1ed9ng.<\/td><\/tr><tr><td><code>\/actuator\/health<\/code><\/td><td>Ki\u1ec3m tra tr\u1ea1ng th\u00e1i t\u1ed5ng quan c\u1ee7a \u1ee9ng d\u1ee5ng, bao g\u1ed3m c\u00e1c th\u00e0nh ph\u1ea7n ph\u1ee5 thu\u1ed9c nh\u01b0 database, dung l\u01b0\u1ee3ng \u1ed5 \u0111\u0129a, v.v.<\/td><\/tr><tr><td><code>\/actuator\/info<\/code><\/td><td>Hi\u1ec3n th\u1ecb th\u00f4ng tin t\u00f9y ch\u1ec9nh v\u1ec1 \u1ee9ng d\u1ee5ng nh\u01b0 phi\u00ean b\u1ea3n, th\u00f4ng tin build, v.v.<\/td><\/tr><tr><td><code>\/actuator\/metrics<\/code><\/td><td>Cung c\u1ea5p s\u1ed1 li\u1ec7u chi ti\u1ebft v\u1ec1 hi\u1ec7u su\u1ea5t \u1ee9ng d\u1ee5ng: b\u1ed9 nh\u1edb JVM, s\u1ed1 l\u01b0\u1ee3ng request HTTP, CPU, v.v.<\/td><\/tr><tr><td><code>\/actuator\/loggers<\/code><\/td><td>Xem v\u00e0 thay \u0111\u1ed5i m\u1ee9c \u0111\u1ed9 log c\u1ee7a t\u1eebng logger trong runtime m\u00e0 kh\u00f4ng c\u1ea7n restart \u1ee9ng d\u1ee5ng.<\/td><\/tr><tr><td><code>\/actuator\/env<\/code><\/td><td>Hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 bi\u1ebfn m\u00f4i tr\u01b0\u1eddng v\u00e0 thu\u1ed9c t\u00ednh c\u1ea5u h\u00ecnh hi\u1ec7n t\u1ea1i c\u1ee7a \u1ee9ng d\u1ee5ng.<\/td><\/tr><tr><td><code>\/actuator\/beans<\/code><\/td><td>Li\u1ec7t k\u00ea to\u00e0n b\u1ed9 c\u00e1c Spring Bean \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 qu\u1ea3n l\u00fd trong \u1ee9ng d\u1ee5ng.<\/td><\/tr><tr><td><code>\/actuator\/shutdown<\/code><\/td><td>Cho ph\u00e9p t\u1eaft \u1ee9ng d\u1ee5ng m\u1ed9t c\u00e1ch an to\u00e0n (graceful shutdown); m\u1eb7c \u0111\u1ecbnh b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-b\u1eaft-d\u1ea7u-v\u1edbi-spring-boot-actuator-cai-d\u1eb7t-va-c\u1ea5u-hinh\"><span class=\"ez-toc-section\" id=\"Bat_dau_voi_Spring_Boot_Actuator_Cai_dat_va_Cau_hinh\"><\/span><strong>B\u1eaft \u0111\u1ea7u v\u1edbi Spring Boot Actuator: C\u00e0i \u0111\u1eb7t v\u00e0 C\u1ea5u h\u00ecnh<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Vi\u1ec7c t\u00edch h\u1ee3p Spring Boot Actuator v\u00e0o d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n c\u1ef1c k\u1ef3 \u0111\u01a1n gi\u1ea3n. Ch\u1ec9 v\u1edbi v\u00e0i b\u01b0\u1edbc c\u1ea5u h\u00ecnh, b\u1ea1n \u0111\u00e3 c\u00f3 th\u1ec3 m\u1edf kh\u00f3a b\u1ed9 c\u00f4ng c\u1ee5 gi\u00e1m s\u00e1t m\u1ea1nh m\u1ebd n\u00e0y.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-1-them-dependency\"><strong>B\u01b0\u1edbc 1: Th\u00eam dependency<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ea7u ti\u00ean, b\u1ea1n c\u1ea7n khai b\u00e1o dependency <code>spring-boot-starter-actuator<\/code> v\u00e0o file qu\u1ea3n l\u00fd c\u1ee7a d\u1ef1 \u00e1n.<\/p>\n\n\n\n<p><strong>\u0110\u1ed1i v\u1edbi Maven<\/strong><\/p>\n\n\n\n<p>M\u1edf file <code>pom.xml<\/code> v\u00e0 th\u00eam dependency sau v\u00e0o trong th\u1ebb <code>&lt;dependencies&gt;<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p><strong>\u0110\u1ed1i v\u1edbi Gradle<\/strong><\/p>\n\n\n\n<p>M\u1edf file <code>build.gradle<\/code> v\u00e0 th\u00eam v\u00e0o \u0111o\u1ea1n code <code>dependencies <\/code>sau:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dependencies { \n     implementation 'org.springframework.boot:spring-boot-starter-actuator' \n}<\/code><\/pre>\n\n\n\n<p>Sau khi th\u00eam dependency v\u00e0 build l\u1ea1i d\u1ef1 \u00e1n, Spring Boot s\u1ebd t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh Actuator cho b\u1ea1n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-2-expose-cac-endpoints\"><strong>B\u01b0\u1edbc 2: Expose c\u00e1c Endpoints<\/strong><\/h3>\n\n\n\n<p>V\u00ec l\u00fd do <strong>b\u1ea3o m\u1eadt<\/strong>, k\u1ec3 t\u1eeb phi\u00ean b\u1ea3n Spring Boot 2.x, ch\u1ec9 c\u00f3 hai endpoint \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb (expose) m\u1eb7c \u0111\u1ecbnh qua HTTP l\u00e0 <code>\/actuator\/health<\/code> v\u00e0 <code>\/actuator\/info<\/code>. H\u1ea7u h\u1ebft c\u00e1c endpoint kh\u00e1c nh\u01b0 <code>\/metrics<\/code>, <code>\/env<\/code>, <code>\/beans<\/code>&#8230; \u0111\u1ec1u \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t nh\u01b0ng kh\u00f4ng th\u1ec3 truy c\u1eadp qua web \u0111\u1ec3 tr\u00e1nh r\u00f2 r\u1ec9 th\u00f4ng tin nh\u1ea1y c\u1ea3m.<\/p>\n\n\n\n<p>\u0110\u1ec3 c\u00f3 th\u1ec3 truy c\u1eadp c\u00e1c endpoint kh\u00e1c, b\u1ea1n c\u1ea7n khai b\u00e1o ch\u00fang m\u1ed9t c\u00e1ch t\u01b0\u1eddng minh trong file c\u1ea5u h\u00ecnh <code>application.properties<\/code> ho\u1eb7c <code>application.yml<\/code>.<\/p>\n\n\n\n<p><strong>C\u00e1ch c\u1ea5u h\u00ecnh<\/strong><\/p>\n\n\n\n<p>M\u1edf file <code>src\/main\/resources\/application.propertie<\/code>s (ho\u1eb7c .yml) v\u00e0 th\u00eam v\u00e0o c\u1ea5u h\u00ecnh sau:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"605\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85.png\" alt=\"\" class=\"wp-image-89950\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85.png 800w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85-300x227.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85-640x484.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85-200x151.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-85-768x581.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p><strong>Expose t\u1ea5t c\u1ea3 c\u00e1c endpoint (Th\u01b0\u1eddng d\u00f9ng cho m\u00f4i tr\u01b0\u1eddng DEV):<\/strong><\/p>\n\n\n\n<p>Trong <code>application.properties<\/code>: management.endpoints.web.exposure.include=*<\/p>\n\n\n\n<p>Trong application.yml:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>management:\n\n\u00a0\u00a0endpoints:\n\n\u00a0\u00a0\u00a0\u00a0web:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exposure:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0include: \"*\"<\/code><\/pre>\n\n\n\n<p><strong>L\u01b0u \u00fd:<\/strong> D\u1ea5u * l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn ti\u1ec7n l\u1ee3i cho m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n, nh\u01b0ng h\u00e3y c\u1ea9n th\u1eadn khi s\u1eed d\u1ee5ng trong m\u00f4i tr\u01b0\u1eddng production v\u00ec n\u00f3 c\u00f3 th\u1ec3 l\u00e0m l\u1ed9 th\u00f4ng tin nh\u1ea1y c\u1ea3m.<\/p>\n\n\n\n<p><strong>Expose c\u00e1c endpoint c\u1ee5 th\u1ec3 (Khuy\u1ebfn kh\u00edch cho m\u00f4i tr\u01b0\u1eddng PROD)<\/strong><\/p>\n\n\n\n<p>B\u1ea1n n\u00ean li\u1ec7t k\u00ea ch\u00ednh x\u00e1c nh\u1eefng endpoint m\u00ecnh c\u1ea7n.<\/p>\n\n\n\n<p>Trong <code>application.properties<\/code>: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>management.endpoints.web.exposure.include=health,info,metrics,prometheus<\/code><\/pre>\n\n\n\n<p>Trong <code>application.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>management:\n  endpoints:\n    web:\n      exposure:\n        include: \"health,info,metrics,prometheus\"<\/code><\/pre>\n\n\n\n<p>Sau khi c\u1ea5u h\u00ecnh xong, h\u00e3y kh\u1edfi \u0111\u1ed9ng l\u1ea1i \u1ee9ng d\u1ee5ng. Gi\u1edd \u0111\u00e2y b\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp c\u00e1c endpoint \u0111\u00e3 expose qua URL, v\u00ed d\u1ee5: d\u00f9ng l\u1ec7nh sau \u0111\u1ec3 ki\u1ec3m tra:&nbsp; <code>$ curl 'http:\/\/localhost:8080\/actuator\/metrics' -i -X GET<\/code> K\u1ebft qu\u1ea3 sau khi truy c\u1eadp, b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 200 OK\nContent-Type: application\/vnd.spring-boot.actuator.v3+json\nContent-Length: 154\n\n{\n  \"names\" : &#91; \"jvm.buffer.count\", \"jvm.buffer.memory.used\", \"jvm.buffer.total.capacity\", \"jvm.memory.committed\", \"jvm.memory.max\", \"jvm.memory.used\" ]\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-b\u1ea3o-m\u1eadt-cho-actuator-endpoint\"><span class=\"ez-toc-section\" id=\"Bao_mat_cho_Actuator_endpoint\"><\/span><strong>B\u1ea3o m\u1eadt cho Actuator endpoint<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-t\u1ea1i-sao-ph\u1ea3i-b\u1ea3o-m\u1eadt\"><strong>T\u1ea1i sao ph\u1ea3i b\u1ea3o m\u1eadt?<\/strong><\/h3>\n\n\n\n<p>Vi\u1ec7c c\u00f3 th\u1ec3 xem s\u00e2u v\u00e0o b\u00ean trong \u1ee9ng d\u1ee5ng l\u00e0 m\u1ed9t l\u1ee3i th\u1ebf l\u1edbn, nh\u01b0ng c\u0169ng \u0111i k\u00e8m v\u1edbi r\u1ee7i ro. N\u1ebfu kh\u00f4ng \u0111\u01b0\u1ee3c b\u1ea3o v\u1ec7, c\u00e1c endpoint c\u1ee7a Actuator c\u00f3 th\u1ec3 tr\u1edf th\u00e0nh m\u1ed9t l\u1ed7 h\u1ed5ng b\u1ea3o m\u1eadt nghi\u00eam tr\u1ecdng.<\/p>\n\n\n\n<p>H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng m\u1ed9t k\u1ebb x\u1ea5u c\u00f3 th\u1ec3 truy c\u1eadp v\u00e0o c\u00e1c endpoint c\u1ee7a b\u1ea1n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>L\u1ed9 th\u00f4ng tin nh\u1ea1y c\u1ea3m<\/strong>: Endpoint \/env c\u00f3 th\u1ec3 ph\u01a1i b\u00e0y to\u00e0n b\u1ed9 bi\u1ebfn m\u00f4i tr\u01b0\u1eddng, bao g\u1ed3m c\u1ea3 <strong>m\u1eadt kh\u1ea9u database<\/strong>, <strong>API keys<\/strong>, v\u00e0 c\u00e1c th\u00f4ng tin b\u00ed m\u1eadt kh\u00e1c.<\/li>\n\n\n\n<li><strong>Th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng nguy hi\u1ec3m<\/strong>: N\u1ebfu endpoint \/shutdown \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t v\u00e0 kh\u00f4ng b\u1ea3o v\u1ec7, b\u1ea5t k\u1ef3 ai c\u0169ng c\u00f3 th\u1ec3 t\u1eaft \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n ch\u1ec9 b\u1eb1ng m\u1ed9t request. C\u00e1c endpoint kh\u00e1c nh\u01b0 \/loggers c\u0169ng c\u00f3 th\u1ec3 b\u1ecb l\u1ee3i d\u1ee5ng \u0111\u1ec3 thay \u0111\u1ed5i h\u00e0nh vi c\u1ee7a \u1ee9ng d\u1ee5ng.<\/li>\n<\/ul>\n\n\n\n<p>V\u00ec v\u1eady, b\u1ea3o m\u1eadt c\u00e1c endpoint c\u1ee7a Actuator l\u00e0 vi\u1ec7c <strong>b\u1eaft bu\u1ed9c<\/strong> trong m\u00f4i tr\u01b0\u1eddng production.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cac-ph\u01b0\u01a1ng-phap-b\u1ea3o-m\u1eadt\"><strong>C\u00e1c ph\u01b0\u01a1ng ph\u00e1p b\u1ea3o m\u1eadt<\/strong><\/h3>\n\n\n\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c ph\u01b0\u01a1ng ph\u00e1p ph\u1ed5 bi\u1ebfn v\u00e0 hi\u1ec7u qu\u1ea3 \u0111\u1ec3 b\u1ea3o v\u1ec7 c\u00e1c endpoint c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ch\u1ea1y tr\u00ean m\u1ed9t c\u1ed5ng (port) kh\u00e1c<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t bi\u1ec7n ph\u00e1p gi\u00fap c\u00f4 l\u1eadp truy c\u1eadp. B\u1ea1n c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh \u0111\u1ec3 c\u00e1c endpoint c\u1ee7a Actuator ch\u1ea1y tr\u00ean m\u1ed9t c\u1ed5ng m\u1ea1ng ri\u00eang bi\u1ec7t so v\u1edbi c\u1ed5ng ch\u00ednh c\u1ee7a \u1ee9ng d\u1ee5ng. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p b\u1ea1n thi\u1ebft l\u1eadp c\u00e1c quy t\u1eafc t\u01b0\u1eddng l\u1eeda d\u1ec5 d\u00e0ng h\u01a1n cho c\u1ed5ng qu\u1ea3n l\u00fd.<\/p>\n\n\n\n<p>C\u1ea5u h\u00ecnh trong <code>application.properties<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># C\u1ed5ng ch\u00ednh c\u1ee7a \u1ee9ng d\u1ee5ng\nserver.port=8080\n# C\u1ed5ng ri\u00eang cho Actuator\nmanagement.server.port=9090<\/code><\/pre>\n\n\n\n<p>B\u00e2y gi\u1edd, \u1ee9ng d\u1ee5ng s\u1ebd ch\u1ea1y tr\u00ean c\u1ed5ng <code>8080<\/code>, nh\u01b0ng c\u00e1c endpoint Actuator s\u1ebd ch\u1ec9 c\u00f3 th\u1ec3 truy c\u1eadp qua c\u1ed5ng <code>9090&nbsp;<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>T\u00edch h\u1ee3p v\u1edbi Spring Security<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u0110\u00e2y l\u00e0 ph\u01b0\u01a1ng ph\u00e1p m\u1ea1nh m\u1ebd v\u00e0 \u0111\u01b0\u1ee3c khuy\u1ebfn kh\u00edch nh\u1ea5t. B\u1eb1ng c\u00e1ch th\u00eam Spring Security v\u00e0o d\u1ef1 \u00e1n, t\u1ea5t c\u1ea3 c\u00e1c endpoint c\u1ee7a Actuator (tr\u1eeb <code>\/health<\/code> v\u00e0 <code>\/info<\/code> trong m\u1ed9t s\u1ed1 c\u1ea5u h\u00ecnh) s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c b\u1ea3o v\u1ec7 v\u00e0 y\u00eau c\u1ea7u x\u00e1c th\u1ef1c.<\/p>\n\n\n\n<p>Ch\u1ec9 c\u1ea7n th\u00eam dependency <code>spring-boot-starter-security<\/code>, Spring Boot s\u1ebd t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh m\u1ed9t l\u1edbp b\u1ea3o m\u1eadt c\u01a1 b\u1ea3n (HTTP Basic Authentication) cho t\u1ea5t c\u1ea3 c\u00e1c endpoint qu\u1ea3n l\u00fd.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>H\u1ea1n ch\u1ebf Expose Endpoints<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Nguy\u00ean t\u1eafc c\u01a1 b\u1ea3n nh\u1ea5t: &#8220;\u0110\u1eebng ph\u01a1i b\u00e0y nh\u1eefng g\u00ec b\u1ea1n kh\u00f4ng c\u1ea7n&#8221;. Nh\u01b0 \u0111\u00e3 \u0111\u1ec1 c\u1eadp \u1edf ph\u1ea7n tr\u01b0\u1edbc, trong m\u00f4i tr\u01b0\u1eddng production, b\u1ea1n ch\u1ec9 n\u00ean expose nh\u1eefng endpoint th\u1ef1c s\u1ef1 c\u1ea7n thi\u1ebft.<\/p>\n\n\n\n<p><strong>C\u1ea5u h\u00ecnh trong application.properties:<\/strong><\/p>\n\n\n\n<p># Ch\u1ec9 cho ph\u00e9p truy c\u1eadp health v\u00e0 prometheus \u0111\u1ec3 gi\u00e1m s\u00e1t<\/p>\n\n\n\n<p><code>management.endpoints.web.exposure.include=health,prometheus<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>B\u1ea3o m\u1eadt qua T\u01b0\u1eddng l\u1eeda\/M\u1ea1ng<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t l\u1edbp b\u1ea3o v\u1ec7 \u1edf t\u1ea7ng h\u1ea1 t\u1ea7ng. B\u1ea1n n\u00ean c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda (firewall) ho\u1eb7c c\u00e1c quy t\u1eafc m\u1ea1ng (network policies) \u0111\u1ec3 ch\u1eb7n t\u1ea5t c\u1ea3 truy c\u1eadp t\u1eeb internet c\u00f4ng c\u1ed9ng v\u00e0o c\u1ed5ng qu\u1ea3n l\u00fd c\u1ee7a Actuator. Ch\u1ec9 cho ph\u00e9p truy c\u1eadp t\u1eeb nh\u1eefng d\u1ea3i IP tin c\u1eady, ch\u1eb3ng h\u1ea1n nh\u01b0 m\u1ea1ng n\u1ed9i b\u1ed9 c\u1ee7a c\u00f4ng ty ho\u1eb7c qua VPN. Ph\u01b0\u01a1ng ph\u00e1p n\u00e0y \u0111\u1eb7c bi\u1ec7t hi\u1ec7u qu\u1ea3 khi k\u1ebft h\u1ee3p v\u1edbi vi\u1ec7c ch\u1ea1y Actuator tr\u00ean m\u1ed9t c\u1ed5ng ri\u00eang.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-thao-tac-nang-cao-tich-h\u1ee3p-v\u1edbi-prometheus-va-grafana\"><span class=\"ez-toc-section\" id=\"Cac_thao_tac_nang_cao_Tich_hop_voi_Prometheus_va_Grafana\"><\/span><strong>C\u00e1c thao t\u00e1c n\u00e2ng cao: T\u00edch h\u1ee3p v\u1edbi Prometheus v\u00e0 Grafana<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>M\u1eb7c d\u00f9 c\u00e1c endpoint c\u1ee7a Actuator r\u1ea5t h\u1eefu \u00edch \u0111\u1ec3 ki\u1ec3m tra nhanh, s\u1ee9c m\u1ea1nh th\u1ef1c s\u1ef1 c\u1ee7a n\u00f3 \u0111\u01b0\u1ee3c ph\u00e1t huy khi k\u1ebft h\u1ee3p v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t chuy\u00ean nghi\u1ec7p. <a href=\"https:\/\/www.baeldung.com\/spring-boot-prometheus\" target=\"_blank\" rel=\"noreferrer noopener\">Prometheus<\/a> v\u00e0 <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/6756-spring-boot-statistics\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a> l\u00e0 b\u1ed9 \u0111\u00f4i &#8220;ti\u00eau chu\u1ea9n v\u00e0ng&#8221; trong th\u1ebf gi\u1edbi gi\u00e1m s\u00e1t h\u1ec7 th\u1ed1ng hi\u1ec7n \u0111\u1ea1i, gi\u00fap b\u1ea1n theo d\u00f5i hi\u1ec7u su\u1ea5t \u1ee9ng d\u1ee5ng m\u1ed9t c\u00e1ch tr\u1ef1c quan v\u00e0 li\u00ean t\u1ee5c.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-lu\u1ed3ng-ho\u1ea1t-d\u1ed9ng\"><strong>Lu\u1ed3ng ho\u1ea1t \u0111\u1ed9ng<\/strong><\/h3>\n\n\n\n<p>Lu\u1ed3ng d\u1eef li\u1ec7u ho\u1ea1t \u0111\u1ed9ng theo m\u1ed9t chu tr\u00ecnh \u0111\u01a1n gi\u1ea3n nh\u01b0ng m\u1ea1nh m\u1ebd:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Spring Boot Actuator<\/strong>: Thu th\u1eadp c\u00e1c ch\u1ec9 s\u1ed1 (metrics) c\u1ee7a \u1ee9ng d\u1ee5ng v\u00e0 expose ch\u00fang t\u1ea1i m\u1ed9t endpoint \u0111\u1eb7c bi\u1ec7t (<code>\/actuator\/prometheus<\/code>) d\u01b0\u1edbi \u0111\u1ecbnh d\u1ea1ng m\u00e0 Prometheus c\u00f3 th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c.<\/li>\n\n\n\n<li><strong>Prometheus<\/strong>: L\u00e0 m\u1ed9t c\u01a1 s\u1edf d\u1eef li\u1ec7u chu\u1ed7i th\u1eddi gian (time-series database). N\u00f3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u1ec3 \u0111\u1ecbnh k\u1ef3 truy c\u1eadp (g\u1ecdi l\u00e0 &#8220;c\u00e0o&#8221; &#8211; scrape) v\u00e0o endpoint <code>\/actuator\/prometheus<\/code> c\u1ee7a \u1ee9ng d\u1ee5ng \u0111\u1ec3 l\u1ea5y d\u1eef li\u1ec7u metrics v\u00e0 l\u01b0u tr\u1eef l\u1ea1i.<\/li>\n\n\n\n<li><strong>Grafana<\/strong>: L\u00e0 c\u00f4ng c\u1ee5 tr\u1ef1c quan h\u00f3a d\u1eef li\u1ec7u. Grafana k\u1ebft n\u1ed1i t\u1edbi Prometheus nh\u01b0 m\u1ed9t ngu\u1ed3n d\u1eef li\u1ec7u, sau \u0111\u00f3 cho ph\u00e9p b\u1ea1n t\u1ea1o ra c\u00e1c bi\u1ec3u \u0111\u1ed3, b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n (dashboard) \u0111\u1eb9p m\u1eaft, d\u1ec5 theo d\u00f5i v\u00e0 t\u00f9y bi\u1ebfn cao t\u1eeb c\u00e1c metrics \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cac-b\u01b0\u1edbc-c\u1ea5u-hinh-c\u01a1-b\u1ea3n\"><strong>C\u00e1c b\u01b0\u1edbc c\u1ea5u h\u00ecnh c\u01a1 b\u1ea3n<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ec3 thi\u1ebft l\u1eadp lu\u1ed3ng ho\u1ea1t \u0111\u1ed9ng n\u00e0y, b\u1ea1n c\u1ea7n th\u1ef1c hi\u1ec7n c\u00e1c b\u01b0\u1edbc sau:<\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 1: Th\u00eam Dependency cho Prometheus<\/strong><\/p>\n\n\n\n<p>\u0110\u1ea7u ti\u00ean, b\u1ea1n c\u1ea7n th\u00eam th\u01b0 vi\u1ec7n <code>micrometer-registry-prometheus<\/code> v\u00e0o d\u1ef1 \u00e1n. Th\u01b0 vi\u1ec7n n\u00e0y gi\u00fap Actuator c\u00f3 th\u1ec3 xu\u1ea5t metrics theo \u0111\u1ecbnh d\u1ea1ng c\u1ee7a Prometheus.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0110\u1ed1i v\u1edbi Maven (<code>pom.xml<\/code>):<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;io.micrometer&lt;\/groupId&gt;\n    &lt;artifactId&gt;micrometer-registry-prometheus&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0110\u1ed1i v\u1edbi Gradle (<code>build.gradle<\/code>): implementation &#8216;io.micrometer:micrometer-registry-prometheus&#8217;<\/li>\n<\/ul>\n\n\n\n<p><strong>B\u01b0\u1edbc 2: Expose Endpoint <code>\/prometheus<\/code><\/strong><\/p>\n\n\n\n<p>Ti\u1ebfp theo, h\u00e3y ch\u1eafc ch\u1eafn r\u1eb1ng endpoint <code>\/prometheus<\/code> \u0111\u01b0\u1ee3c expose qua web trong file c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trong application.properties: <br><code>management.endpoints.web.exposure.include=health,info,prometheus<\/code><\/li>\n\n\n\n<li>Trong application.yml<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>management:\n  endpoints:\n    web:\n      exposure:\n        include: \"health,info,prometheus\"<\/code><\/pre>\n\n\n\n<p>Sau khi kh\u1edfi \u0111\u1ed9ng l\u1ea1i, \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n s\u1ebd c\u00f3 m\u1ed9t endpoint t\u1ea1i http:\/\/localhost:8080\/actuator\/prometheus \u0111\u1ec3 Prometheus l\u1ea5y d\u1eef li\u1ec7u.<\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 3: C\u1ea5u h\u00ecnh Prometheus<\/strong><\/p>\n\n\n\n<p>B\u1ea1n c\u1ea7n c\u00f3 m\u1ed9t server Prometheus \u0111ang ch\u1ea1y. Trong file c\u1ea5u h\u00ecnh <code>prometheus.yml<\/code> c\u1ee7a server \u0111\u00f3, b\u1ea1n th\u00eam m\u1ed9t &#8220;scrape job&#8221; m\u1edbi \u0111\u1ec3 n\u00f3 bi\u1ebft c\u1ea7n l\u1ea5y d\u1eef li\u1ec7u t\u1eeb \u0111\u00e2u.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>crape_configs:\n  - job_name: 'spring-boot-app'\n    metrics_path: '\/actuator\/prometheus' # \u0110\u01b0\u1eddng d\u1eabn t\u1edbi endpoint\n    static_configs:\n      - targets: &#91;'YOUR_APP_IP:8080'] # \u0110\u1ecba ch\u1ec9 IP v\u00e0 port c\u1ee7a \u1ee9ng d\u1ee5ng<\/code><\/pre>\n\n\n\n<p><strong>B\u01b0\u1edbc 4: T\u1ea1o Dashboard tr\u00ean Grafana<\/strong><\/p>\n\n\n\n<p>Cu\u1ed1i c\u00f9ng, b\u1ea1n c\u00e0i \u0111\u1eb7t Grafana, k\u1ebft n\u1ed1i n\u00f3 v\u1edbi server Prometheus c\u1ee7a b\u1ea1n nh\u01b0 m\u1ed9t &#8220;Data Source&#8221;. T\u1eeb \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 b\u1eaft \u0111\u1ea7u t\u1ea1o c\u00e1c dashboard. B\u1ea1n c\u00f3 th\u1ec3 t\u1ef1 x\u00e2y d\u1ef1ng c\u00e1c bi\u1ec3u \u0111\u1ed3 t\u1eeb \u0111\u1ea7u ho\u1eb7c import c\u00e1c dashboard c\u00f3 s\u1eb5n d\u00e0nh cho Spring Boot t\u1eeb c\u1ed9ng \u0111\u1ed3ng Grafana \u0111\u1ec3 c\u00f3 ngay m\u1ed9t giao di\u1ec7n gi\u00e1m s\u00e1t ho\u00e0n ch\u1ec9nh.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-th\u01b0\u1eddng-g\u1eb7p-v\u1ec1-spring-boot-actuator\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_Spring_Boot_Actuator\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p<\/strong> v\u1ec1 Spring Boot Actuator<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-co-b\u1eaft-bu\u1ed9c-ph\u1ea3i-dung-spring-security-d\u1ec3-b\u1ea3o-v\u1ec7-actuator-khong\"><strong>C\u00f3 b\u1eaft bu\u1ed9c ph\u1ea3i d\u00f9ng Spring Security \u0111\u1ec3 b\u1ea3o v\u1ec7 Actuator kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p><strong>Kh\u00f4ng b\u1eaft bu\u1ed9c<\/strong>. Nh\u01b0ng \u0111\u00f3 l\u00e0 c\u00e1ch \u0111\u01b0\u1ee3c khuy\u1ebfn kh\u00edch v\u00e0 ph\u1ed5 bi\u1ebfn nh\u1ea5t. Ngo\u00e0i Spring Security, b\u1ea1n c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng c\u00e1c bi\u1ec7n ph\u00e1p kh\u00e1c nh\u01b0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ea1y Actuator tr\u00ean m\u1ed9t c\u1ed5ng (port) ri\u00eang v\u00e0 d\u00f9ng t\u01b0\u1eddng l\u1eeda \u0111\u1ec3 gi\u1edbi h\u1ea1n truy c\u1eadp.<\/li>\n\n\n\n<li>\u0110\u1eb7t \u1ee9ng d\u1ee5ng sau m\u1ed9t API Gateway v\u00e0 c\u1ea5u h\u00ecnh quy\u1ec1n truy c\u1eadp t\u1ea1i Gateway.<\/li>\n<\/ul>\n\n\n\n<p>Tuy nhi\u00ean, t\u00edch h\u1ee3p v\u1edbi Spring Security cung c\u1ea5p c\u01a1 ch\u1ebf b\u1ea3o v\u1ec7 linh ho\u1ea1t v\u00e0 m\u1ea1nh m\u1ebd nh\u1ea5t ngay t\u1ea1i t\u1ea7ng \u1ee9ng d\u1ee5ng.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-spring-boot-actuator-khac-gi-v\u1edbi-cac-cong-c\u1ee5-apm-nh\u01b0-datadog-new-relic\"><strong>Spring Boot Actuator kh\u00e1c g\u00ec v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 APM nh\u01b0 Datadog, New Relic?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spring Boot Actuator<\/strong> \u0111\u00f3ng vai tr\u00f2 l\u00e0 m\u1ed9t<strong> nh\u00e0 cung c\u1ea5p d\u1eef li\u1ec7u (Data Provider)<\/strong>. N\u00f3 l\u00e0 c\u00f4ng c\u1ee5 t\u00edch h\u1ee3p s\u1eb5n, mi\u1ec5n ph\u00ed, gi\u00fap &#8220;ph\u01a1i b\u00e0y&#8221; c\u00e1c ch\u1ec9 s\u1ed1, tr\u1ea1ng th\u00e1i s\u1ee9c kh\u1ecfe, v\u00e0 th\u00f4ng tin v\u1eadn h\u00e0nh t\u1eeb b\u00ean trong \u1ee9ng d\u1ee5ng Spring Boot. N\u00f3 cung c\u1ea5p d\u1eef li\u1ec7u th\u00f4.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C\u00e1c c\u00f4ng c\u1ee5 APM (Application Performance Management)<\/strong> nh\u01b0 Datadog hay New Relic l\u00e0 c\u00e1c <strong>n\u1ec1n t\u1ea3ng gi\u00e1m s\u00e1t to\u00e0n di\u1ec7n (Monitoring Platform)<\/strong>. Ch\u00fang thu th\u1eadp d\u1eef li\u1ec7u t\u1eeb nhi\u1ec1u ngu\u1ed3n (bao g\u1ed3m c\u1ea3 vi\u1ec7c &#8220;c\u00e0o&#8221; d\u1eef li\u1ec7u t\u1eeb endpoint c\u1ee7a Actuator), l\u01b0u tr\u1eef, ph\u00e2n t\u00edch, tr\u1ef1c quan h\u00f3a v\u00e0 cung c\u1ea5p c\u00e1c t\u00ednh n\u0103ng cao c\u1ea5p nh\u01b0 c\u1ea3nh b\u00e1o th\u00f4ng minh, ph\u00e2n t\u00edch s\u00e2u (distributed tracing), v\u00e0 ph\u00e1t hi\u1ec7n b\u1ea5t th\u01b0\u1eddng.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-toi-co-th\u1ec3-t\u1ef1-t\u1ea1o-ra-endpoint-c\u1ee7a-rieng-minh-khong\"><strong>T\u00f4i c\u00f3 th\u1ec3 t\u1ef1 t\u1ea1o ra endpoint c\u1ee7a ri\u00eang m\u00ecnh kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p><strong>Ho\u00e0n to\u00e0n c\u00f3 th\u1ec3<\/strong>. Spring Boot Actuator r\u1ea5t linh ho\u1ea1t v\u00e0 cho ph\u00e9p b\u1ea1n \u0111\u1ecbnh ngh\u0129a c\u00e1c endpoint t\u00f9y ch\u1ec9nh \u0111\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng ho\u1eb7c hi\u1ec3n th\u1ecb th\u00f4ng tin \u0111\u1eb7c th\u00f9 c\u1ee7a \u1ee9ng d\u1ee5ng.<\/p>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 l\u00e0m \u0111i\u1ec1u n\u00e0y b\u1eb1ng c\u00e1ch t\u1ea1o m\u1ed9t class v\u1edbi annotation <code>@Endpoint<\/code> v\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c v\u1edbi annotation <code>@ReadOperation<\/code>, <code>@WriteOperation<\/code> ho\u1eb7c <code>@DeleteOperation<\/code>.<\/p>\n\n\n\n<p>V\u00ed d\u1ee5:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u1ea1o m\u1ed9t endpoint <code>\/clear-cache<\/code> \u0111\u1ec3 x\u00f3a cache c\u1ee7a \u1ee9ng d\u1ee5ng m\u00e0 kh\u00f4ng c\u1ea7n kh\u1edfi \u0111\u1ed9ng l\u1ea1i.<\/li>\n\n\n\n<li>T\u1ea1o m\u1ed9t endpoint <code>\/app-version<\/code> \u0111\u1ec3 hi\u1ec3n th\u1ecb phi\u00ean b\u1ea3n v\u00e0 ng\u00e0y build c\u1ee7a \u1ee9ng d\u1ee5ng.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-qu\u1ea3n-ly-actuator-trong-moi-tr\u01b0\u1eddng-microservices-nh\u01b0-th\u1ebf-nao\"><strong>Qu\u1ea3n l\u00fd Actuator trong m\u00f4i tr\u01b0\u1eddng Microservices nh\u01b0 th\u1ebf n\u00e0o?<\/strong><\/h3>\n\n\n\n<p>Khi b\u1ea1n c\u00f3 h\u00e0ng ch\u1ee5c ho\u1eb7c h\u00e0ng tr\u0103m microservice, vi\u1ec7c theo d\u00f5i t\u1eebng endpoint c\u1ee7a t\u1eebng service ri\u00eang l\u1ebb l\u00e0 kh\u00f4ng kh\u1ea3 thi. Khi \u0111\u00f3 b\u1ea1n c\u1ea7n \u0111\u1ebfn <strong>Spring Boot Admin<\/strong>.<\/p>\n\n\n\n<p><strong>Spring Boot Admin<\/strong> l\u00e0 m\u1ed9t \u1ee9ng d\u1ee5ng web ri\u00eang bi\u1ec7t, do c\u1ed9ng \u0111\u1ed3ng ph\u00e1t tri\u1ec3n, cung c\u1ea5p m\u1ed9t giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng t\u1eadp trung \u0111\u1ec3 qu\u1ea3n l\u00fd v\u00e0 gi\u00e1m s\u00e1t t\u1ea5t c\u1ea3 c\u00e1c \u1ee9ng d\u1ee5ng Spring Boot c\u1ee7a b\u1ea1n. M\u1ed7i microservice s\u1ebd &#8220;\u0111\u0103ng k\u00fd&#8221; v\u1edbi Spring Boot Admin Server, v\u00e0 t\u1eeb giao di\u1ec7n c\u1ee7a Admin, b\u1ea1n c\u00f3 th\u1ec3 xem tr\u1ea1ng th\u00e1i s\u1ee9c kh\u1ecfe, metrics, c\u1ea5u h\u00ecnh, thay \u0111\u1ed5i m\u1ee9c log&#8230; c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c service m\u1ed9t c\u00e1ch t\u1eadp trung. N\u00f3 ch\u00ednh l\u00e0 c\u00f4ng c\u1ee5 &#8220;anh em&#8221; v\u1edbi Actuator trong ki\u1ebfn tr\u00fac microservices.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft\"><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><strong>T\u1ed5ng k\u1ebft<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>T\u00f3m l\u1ea1i, <strong>Spring Boot Actuator<\/strong> l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu \u0111\u1ec3 b\u1ea1n t\u1ef1 tin \u0111\u01b0a \u1ee9ng d\u1ee5ng Spring Boot v\u00e0o m\u00f4i tr\u01b0\u1eddng production. N\u00f3 cung c\u1ea5p c\u00e1c kh\u1ea3 n\u0103ng gi\u00e1m s\u00e1t v\u00e0 qu\u1ea3n l\u00fd c\u1ed1t l\u00f5i, gi\u00fap bi\u1ebfn \u1ee9ng d\u1ee5ng t\u1eeb m\u1ed9t &#8220;h\u1ed9p \u0111en&#8221; th\u00e0nh m\u1ed9t h\u1ec7 th\u1ed1ng minh b\u1ea1ch. Vi\u1ec7c t\u00edch h\u1ee3p Actuator kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n nhanh ch\u00f3ng ch\u1ea9n \u0111o\u00e1n s\u1ef1 c\u1ed1 m\u00e0 c\u00f2n l\u00e0 m\u1ed9t b\u01b0\u1edbc \u0111i quan tr\u1ecdng h\u01b0\u1edbng t\u1edbi vi\u1ec7c x\u00e2y d\u1ef1ng c\u00e1c h\u1ec7 th\u1ed1ng c\u00f3 kh\u1ea3 n\u0103ng quan s\u00e1t (observable) cao.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Khi m\u1ed9t \u1ee9ng d\u1ee5ng Spring Boot \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean m\u00f4i tr\u01b0\u1eddng production, l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 b\u1ea1n bi\u1ebft n\u00f3 \u0111ang ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh, hi\u1ec7u su\u1ea5t ra sao, hay c\u00e1c c\u1ea5u h\u00ecnh \u0111\u00e3 ch\u00ednh x\u00e1c ch\u01b0a? \u0110\u00e2y ch\u00ednh l\u00e0 l\u00fac Spring Boot Actuator ph\u00e1t thay th\u1ebf m\u1ea1nh c\u1ee7a m\u00ecnh. B\u00e0i vi\u1ebft sau s\u1ebd gi\u00fap [&hellip;]<\/p>\n","protected":false},"author":203,"featured_media":90296,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109,10350],"tags":[10349],"class_list":["post-89946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it","category-java","tag-spring"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0 - ITviec Blog<\/title>\n<meta name=\"description\" content=\"Xem chi ti\u1ebft Spring Boot Actuator l\u00e0 g\u00ec, h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng \u0111\u1ec3 h\u1ed7 tr\u1ee3 Dev v\u00e0 DevOps theo d\u00f5i s\u1ee9c kh\u1ecfe h\u1ec7 th\u1ed1ng trong production.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0\" \/>\n<meta property=\"og:description\" content=\"Khi m\u1ed9t \u1ee9ng d\u1ee5ng Spring Boot \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean m\u00f4i tr\u01b0\u1eddng production, l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 b\u1ea1n bi\u1ebft n\u00f3 \u0111ang ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh, hi\u1ec7u su\u1ea5t ra sao, hay c\u00e1c c\u1ea5u\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-31T16:37:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T16:37:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1347\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tien Tran\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tien Tran\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0 - ITviec Blog","description":"Xem chi ti\u1ebft Spring Boot Actuator l\u00e0 g\u00ec, h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng \u0111\u1ec3 h\u1ed7 tr\u1ee3 Dev v\u00e0 DevOps theo d\u00f5i s\u1ee9c kh\u1ecfe h\u1ec7 th\u1ed1ng trong production.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0","og_description":"Khi m\u1ed9t \u1ee9ng d\u1ee5ng Spring Boot \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean m\u00f4i tr\u01b0\u1eddng production, l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 b\u1ea1n bi\u1ebft n\u00f3 \u0111ang ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh, hi\u1ec7u su\u1ea5t ra sao, hay c\u00e1c c\u1ea5u","og_url":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-07-31T16:37:03+00:00","article_modified_time":"2025-07-31T16:37:05+00:00","og_image":[{"width":2560,"height":1347,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png","type":"image\/png"}],"author":"Tien Tran","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Tien Tran","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"17 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/"},"author":{"name":"Tien Tran","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/1595d671c49cfa2a48cd3c0a047a1298"},"headline":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0","datePublished":"2025-07-31T16:37:03+00:00","dateModified":"2025-07-31T16:37:05+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/"},"wordCount":4360,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png","keywords":["spring"],"articleSection":["Chuy\u00ean m\u00f4n IT","Java"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/","url":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/","name":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0 - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png","datePublished":"2025-07-31T16:37:03+00:00","dateModified":"2025-07-31T16:37:05+00:00","description":"Xem chi ti\u1ebft Spring Boot Actuator l\u00e0 g\u00ec, h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng \u0111\u1ec3 h\u1ed7 tr\u1ee3 Dev v\u00e0 DevOps theo d\u00f5i s\u1ee9c kh\u1ecfe h\u1ec7 th\u1ed1ng trong production.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-boot-actuator-scaled.png","width":800,"height":421,"caption":"spring boot actuator - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/spring-boot-actuator-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Actuator l\u00e0 g\u00ec: C\u00e1ch qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng tr\u00ean production\u00a0"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/1595d671c49cfa2a48cd3c0a047a1298","name":"Tien Tran","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","caption":"Tien Tran"},"url":"https:\/\/itviec.com\/blog\/author\/tien-tran\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=89946"}],"version-history":[{"count":4,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89946\/revisions"}],"predecessor-version":[{"id":90297,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89946\/revisions\/90297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/90296"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=89946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=89946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=89946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}