Actuator
Spring Boot দিয়ে তৈরি অ্যাপ্লিকেশন প্রোডাকশনে গেলে, অনেক সময় প্রয়োজন হয় তার হেলথ, মেট্রিক্স, লগিং, কনফিগারেশন, ও স্টেটাস মনিটরিং করার। এই কাজগুলোকে সহজ করার জন্য Spring Boot আমাদের দেয় এক শক্তিশালী টুল — Spring Boot Actuator।
Actuator কী?
Spring Boot Actuator হলো এমন এক সেট built-in endpoints, যা তোমার অ্যাপ্লিকেশনের রানটাইম অবস্থা মনিটর ও ম্যানেজ করতে সাহায্য করে।
এটি তোমাকে জানাতে পারে:
- অ্যাপ্লিকেশন চলছে কিনা
- মেমোরি ব্যবহার
- অ্যাপ কনফিগারেশন প্রোপার্টিজ
- লগ লেভেল
- ডাটাবেস কানেকশন স্টেটাস
- কাস্টম হেলথ চেক ইত্যাদি
Step 1: Dependency যোগ করা
প্রথমে spring-boot-starter-actuator ডিপেন্ডেন্সি যোগ করো:
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Gradle ব্যবহার করলে:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Step 2: Endpoints এক্সেস করা
Spring Boot Actuator ডিফল্টভাবে কিছু endpoints সরবরাহ করে, যেমন:
| Endpoint | বর্ণনা |
|---|---|
/actuator/health |
অ্যাপ্লিকেশন হেলথ স্ট্যাটাস |
/actuator/info |
অ্যাপ সংক্রান্ত সাধারণ তথ্য |
/actuator/metrics |
পারফরম্যান্স মেট্রিক্স |
/actuator/env |
Environment variables |
/actuator/loggers |
লগ লেভেল পরিবর্তন |
Step 3: Actuator কনফিগারেশন (application.properties)
ডিফল্টভাবে শুধুমাত্র /actuator/health এবং /actuator/info প্রকাশিত থাকে।
অন্য endpoints এক্সেস করতে হলে application.properties এ নিচের কনফিগারেশন যোগ করো:
# সব actuator endpoints এক্সপোজ করা
management.endpoints.web.exposure.include=*
# অ্যাপ্লিকেশনের ইনফো
info.app.name=Spring Boot Actuator Demo
info.app.version=1.0.0
Step 4: কাস্টম হেলথ ইন্ডিকেটর তৈরি
তুমি চাইলে নিজের কাস্টম Health Check তৈরি করতে পারো।
উদাহরণস্বরূপ, আমরা যাচাই করব কোনো external API কাজ করছে কিনা।
@Component
public class ApiHealthIndicator implements HealthIndicator {
@Override
public Health health() {
try {
URL url = new URL("https://example.com/api/status");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 200) {
return Health.up().withDetail("External API", "Available").build();
} else {
return Health.down().withDetail("External API", "Unavailable").build();
}
} catch (Exception e) {
return Health.down(e).build();
}
}
}
এখন /actuator/health এ গেলে দেখা যাবে কাস্টম রেজাল্ট।
Step 5: Metrics Endpoint ব্যবহার
/actuator/metrics endpoint তোমার অ্যাপের পারফরম্যান্স ও রিসোর্স ব্যবহারের পরিসংখ্যান দেখায়।
উদাহরণ:
GET /actuator/metrics/jvm.memory.used
ফলাফল:
{
"name": "jvm.memory.used",
"measurements": [
{ "statistic": "VALUE", "value": 12345678 }
],
"availableTags": [
{ "tag": "area", "values": ["heap", "nonheap"] }
]
}
Step 6: নিরাপত্তা (Security)
Production এ actuator endpoints সবার জন্য খোলা রাখা উচিত নয়।
Spring Security দিয়ে সহজেই প্রটেক্ট করা যায়:
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health", "/actuator/info").permitAll()
.requestMatchers("/actuator/**").hasRole("ADMIN")
.anyRequest().authenticated()
).httpBasic();
return http.build();
}
}
Step 7: কাস্টম Endpoint তৈরি করা
তুমি নিজের actuator endpoint তৈরি করতে পারো:
@Component
@Endpoint(id = "custom-status")
public class CustomEndpoint {
@ReadOperation
public Map<String, Object> customStatus() {
return Map.of(
"status", "running",
"uptime", System.currentTimeMillis()
);
}
}
এটি /actuator/custom-status এ পাওয়া যাবে।
Step 8: Spring Boot Admin Integration
Spring Boot Actuator কে Spring Boot Admin এর সাথে যুক্ত করলে, তুমি সুন্দর ড্যাশবোর্ডে multiple microservices একসাথে মনিটর করতে পারবে। এর জন্য শুধু actuator endpoints এক্সপোজ করে Admin সার্ভারে রেজিস্টার করতে হয়।
Best Practices
- কেবল প্রয়োজনীয় endpoints প্রোডাকশনে এক্সপোজ করো।
- /actuator/health ও /actuator/info পাবলিক রাখা যায়, বাকিগুলো প্রোটেক্ট করো।
- Custom Health Check ব্যবহার করে এক্সটারনাল ডিপেন্ডেন্সি মনিটর করো।
- মেট্রিক্স ডেটা Prometheus, Grafana ইত্যাদির সাথে ইন্টিগ্রেট করো।