ãµãŒãã¹ãã£ã¹ã«ããªãŒã«ããããã«ã¹ãã§ãã¯ã®éèŠãªåœ¹å²ã解説ãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®èæ§ãšã¹ã±ãŒã©ããªãã£ãé«ããŸããçš®é¡ãå®è£ æŠç¥ããã¹ããã©ã¯ãã£ã¹ãåŠã³ãŸãããã
ãµãŒãã¹ãã£ã¹ã«ããªãŒïŒãã«ã¹ãã§ãã¯ã¡ã«ããºã ã®è©³çް
ãã€ã¯ããµãŒãã¹ãšåæ£ã·ã¹ãã ã®äžçã§ã¯ããµãŒãã¹ãã£ã¹ã«ããªãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãäºãã«å Žæãç¹å®ããéä¿¡ã§ããããã«ããéèŠãªã³ã³ããŒãã³ãã§ãããã ãããµãŒãã¹ã®å Žæãç¥ã£ãŠããã ãã§ã¯ååã§ã¯ãããŸããããµãŒãã¹ãæ£åžžã§ããããªã¯ãšã¹ããåŠçã§ããããšã確èªããå¿ èŠããããŸããããã§ãã«ã¹ãã§ãã¯ãç»å ŽããŸãã
ãµãŒãã¹ãã£ã¹ã«ããªãŒãšã¯ïŒ
ãµãŒãã¹ãã£ã¹ã«ããªãŒãšã¯ãåçãªç°å¢å ã§ãµãŒãã¹ãèªåçã«æ€åºããŠç¹å®ããããã»ã¹ã§ããåŸæ¥ã®ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããµãŒãã¹ã¯éåžžãåããµãŒããŒäžã«ååšãããã®å Žæã¯äºåã«ããã£ãŠããŸããäžæ¹ããã€ã¯ããµãŒãã¹ã¯å€ãã®å Žåãè€æ°ã®ãµãŒããŒã«ãããã€ãããã¹ã±ãŒãªã³ã°ããããã€ãããã³é害ã«ããããã®å Žæã¯é »ç¹ã«å€æŽãããå¯èœæ§ããããŸãããµãŒãã¹ãã£ã¹ã«ããªãŒã¯ããµãŒãã¹ãèªèº«ãç»é²ã§ããäžå€®ã¬ãžã¹ããªãæäŸããã¯ã©ã€ã¢ã³ããå©çšå¯èœãªãµãŒãã¹ãç §äŒã§ããããã«ããããšã§ããã®åé¡ã解決ããŸãã
äžè¬çãªãµãŒãã¹ãã£ã¹ã«ããªãŒããŒã«ã«ã¯æ¬¡ã®ãã®ããããŸãã
- Consul: ãµãŒãã¹ãã£ã¹ã«ããªãŒãæ§æãããã³ã»ã°ã¡ã³ããŒã·ã§ã³æ©èœãåãããµãŒãã¹ã¡ãã·ã¥ãœãªã¥ãŒã·ã§ã³ã
- Etcd: Kubernetesã§ãµãŒãã¹ãã£ã¹ã«ããªãŒã«ãã䜿çšããã忣ããŒããªã¥ãŒã¹ãã¢ã
- ZooKeeper: æ§ææ å ±ã®ç¶æãåœåã忣åæã®æäŸãããã³ã°ã«ãŒããµãŒãã¹ã®ããã®äžå€®éäžåãµãŒãã¹ã
- Kubernetes DNS: Kubernetesã«çµã¿èŸŒãŸããDNSããŒã¹ã®ãµãŒãã¹ãã£ã¹ã«ããªãŒã¡ã«ããºã ã
- Eureka: Spring Cloudç°å¢ã§äž»ã«äœ¿çšããããµãŒãã¹ã¬ãžã¹ããªã
ãã«ã¹ãã§ãã¯ã®éèŠæ§
ãµãŒãã¹ãã£ã¹ã«ããªãŒã¯ãµãŒãã¹ãç¹å®ããã¡ã«ããºã ãæäŸããŸããããããã®ãµãŒãã¹ãæ£åžžã§ããããšãä¿èšŒãããã®ã§ã¯ãããŸããããµãŒãã¹ã¯ãµãŒãã¹ã¬ãžã¹ããªã«ç»é²ãããŠããå¯èœæ§ããããŸãããCPU䜿çšçãé«ããã¡ã¢ãªãªãŒã¯ãããŒã¿ããŒã¹æ¥ç¶ã®åé¡ãªã©ã®åé¡ãæ±ããŠããå¯èœæ§ããããŸãããã«ã¹ãã§ãã¯ããªããšãã¯ã©ã€ã¢ã³ãã¯èª€ã£ãŠç°åžžãªãµãŒãã¹ã«ãªã¯ãšã¹ããã«ãŒãã£ã³ã°ããããã©ãŒãã³ã¹ã®äœäžããšã©ãŒãããã«ã¯ã¢ããªã±ãŒã·ã§ã³ã®åæ¢ã«ã€ãªããå¯èœæ§ããããŸãããã«ã¹ãã§ãã¯ã¯ããµãŒãã¹ã®ãã«ã¹ãç¶ç¶çã«ç£èŠãããµãŒãã¹ã¬ãžã¹ããªããç°åžžãªã€ã³ã¹ã¿ã³ã¹ãèªåçã«åé€ããæ¹æ³ãæäŸããŸããããã«ãããã¯ã©ã€ã¢ã³ãã¯æ£åžžã§å¿çæ§ã®é«ããµãŒãã¹ãšã®ã¿å¯Ÿè©±ã§ããããã«ãªããŸãã
eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ãæ¯æããåŠçããããã«å¥ã®ãµãŒãã¹ã«äŸåããŠããã·ããªãªãèããŠã¿ãŸããããæ¯æããµãŒãã¹ãéè² è·ã«ãªã£ãããããŒã¿ããŒã¹ãšã©ãŒãçºçãããããå Žåã§ãããµãŒãã¹ã¬ãžã¹ããªã«ç»é²ãããŠããå¯èœæ§ããããŸãããã«ã¹ãã§ãã¯ããªãå Žåãeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã¯åŒãç¶ãé害ãçºçããŠãããµãŒãã¹ã«æ¯æããªã¯ãšã¹ããéä¿¡ãããã©ã³ã¶ã¯ã·ã§ã³ã®å€±æãšé¡§å®¢äœéšã®äœäžã«ã€ãªãããŸãããã«ã¹ãã§ãã¯ãå°å ¥ãããŠããå Žåãé害ãçºçããŠããæ¯æããµãŒãã¹ã¯ãµãŒãã¹ã¬ãžã¹ããªããèªåçã«åé€ãããeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã¯ãªã¯ãšã¹ããæ£åžžãªã€ã³ã¹ã¿ã³ã¹ã«ãªãã€ã¬ã¯ããããããšã©ãŒãé©åã«åŠçã§ããŸãã
ãã«ã¹ãã§ãã¯ã®çš®é¡
ãµãŒãã¹ã®ãã«ã¹ãç£èŠããããã«äœ¿çšã§ãããã«ã¹ãã§ãã¯ã«ã¯ãããã€ãã®çš®é¡ããããŸããæãäžè¬çãªã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
HTTPãã«ã¹ãã§ãã¯
HTTPãã«ã¹ãã§ãã¯ã§ã¯ããµãŒãã¹äžã®ç¹å®ã®Endpointã«HTTPãªã¯ãšã¹ããéä¿¡ããå¿çã¹ããŒã¿ã¹ã³ãŒãã確èªããŸããã¹ããŒã¿ã¹ã³ãŒã200ïŒOKïŒã¯éåžžããµãŒãã¹ãæ£åžžã§ããããšã瀺ãããã®ä»ã®ã¹ããŒã¿ã¹ã³ãŒãïŒ500 Internal Server Errorãªã©ïŒã¯åé¡ã瀺ããŸããHTTPãã«ã¹ãã§ãã¯ã¯å®è£ ãç°¡åã§ããµãŒãã¹ã®åºæ¬çãªæ©èœã確èªããããã«äœ¿çšã§ããŸããããšãã°ããã«ã¹ãã§ãã¯ã§ã¯ããµãŒãã¹ã®`/health` EndpointããããŒãããå ŽåããããŸããExpressã䜿çšããNode.jsã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã¯æ¬¡ã®ããã«ç°¡åã§ãã
app.get('/health', (req, res) => {
res.status(200).send('OK');
});
æ§æäŸïŒ
Consul
{
"service": {
"name": "payment-service",
"port": 8080,
"check": {
"http": "http://localhost:8080/health",
"interval": "10s",
"timeout": "5s"
}
}
}
Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: payment-service
spec:
containers:
- name: payment-service-container
image: payment-service:latest
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 3
periodSeconds: 10
TCPãã«ã¹ãã§ãã¯
TCPãã«ã¹ãã§ãã¯ã§ã¯ããµãŒãã¹äžã®ç¹å®ã®ããŒããžã®TCPæ¥ç¶ã確ç«ããããšããŸããæ¥ç¶ãæ£åžžã«ç¢ºç«ãããå ŽåããµãŒãã¹ã¯æ£åžžãšèŠãªãããŸããTCPãã«ã¹ãã§ãã¯ã¯ããµãŒãã¹ãæ£ããããŒãã§ãªãã¹ã³ããæ¥ç¶ãåãå ¥ããŠããããšã確èªããã®ã«åœ¹ç«ã¡ãŸããã¢ããªã±ãŒã·ã§ã³å±€ãæ€æ»ããªããããHTTPãã§ãã¯ãããç°¡åã§ããåºæ¬çãªãã§ãã¯ã§ã¯ãããŒãã®ã¢ã¯ã»ã·ããªãã£ã確èªããŸãã
æ§æäŸïŒ
Consul
{
"service": {
"name": "database-service",
"port": 5432,
"check": {
"tcp": "localhost:5432",
"interval": "10s",
"timeout": "5s"
}
}
}
Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: database-service
spec:
containers:
- name: database-service-container
image: database-service:latest
ports:
- containerPort: 5432
livenessProbe:
tcpSocket:
port: 5432
initialDelaySeconds: 15
periodSeconds: 20
ã³ãã³ãå®è¡ãã«ã¹ãã§ãã¯
ã³ãã³ãå®è¡ãã«ã¹ãã§ãã¯ã§ã¯ããµãŒãã¹ã®ãã¹ãã§ã³ãã³ããå®è¡ããçµäºã³ãŒãã確èªããŸããçµäºã³ãŒã0ã¯éåžžããµãŒãã¹ãæ£åžžã§ããããšã瀺ãããã®ä»ã®çµäºã³ãŒãã¯åé¡ã瀺ããŸããã³ãã³ãå®è¡ãã«ã¹ãã§ãã¯ã¯ããã£ã¹ã¯ã¹ããŒã¹ãã¡ã¢ãªäœ¿çšéããŸãã¯å€éšäŸåé¢ä¿ã®ã¹ããŒã¿ã¹ã確èªãããªã©ãããŸããŸãªãã§ãã¯ãå®è¡ããããã«äœ¿çšã§ãããããæãæè»ãªã¿ã€ãã®ãã«ã¹ãã§ãã¯ã§ããããšãã°ãããŒã¿ããŒã¹æ¥ç¶ãæ£åžžãã©ããã確èªããã¹ã¯ãªãããå®è¡ã§ããŸãã
æ§æäŸïŒ
Consul
{
"service": {
"name": "monitoring-service",
"port": 80,
"check": {
"args": ["/usr/local/bin/check_disk_space.sh"],
"interval": "30s",
"timeout": "10s"
}
}
}
Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: monitoring-service
spec:
containers:
- name: monitoring-service-container
image: monitoring-service:latest
command: ["/usr/local/bin/check_disk_space.sh"]
livenessProbe:
exec:
command: ["/usr/local/bin/check_disk_space.sh"]
initialDelaySeconds: 60
periodSeconds: 30
ã«ã¹ã¿ã ãã«ã¹ãã§ãã¯
ããè€éãªã·ããªãªã§ã¯ãã¢ããªã±ãŒã·ã§ã³åºæã®ããžãã¯ãå®è¡ããã«ã¹ã¿ã ãã«ã¹ãã§ãã¯ãå®è£ ã§ããŸããããã«ã¯ãå éšãã¥ãŒã®ã¹ããŒã¿ã¹ã®ç¢ºèªãå€éšãªãœãŒã¹ã®å¯çšæ§ã®ç¢ºèªããŸãã¯ããé«åºŠãªããã©ãŒãã³ã¹ã¡ããªãã¯ã®å®è¡ãå«ãŸããå ŽåããããŸããã«ã¹ã¿ã ãã«ã¹ãã§ãã¯ã¯ããã«ã¹ã¢ãã¿ãªã³ã°ããã»ã¹ãæã现ããå¶åŸ¡ã§ããŸãã
ããšãã°ãã¡ãã»ãŒãžãã¥ãŒã³ã³ã·ã¥ãŒããŒã®ã«ã¹ã¿ã ãã«ã¹ãã§ãã¯ã§ã¯ããã¥ãŒã®æ·±ããç¹å®ã®ãããå€ãäžåã£ãŠããããšãããã³ã¡ãã»ãŒãžã劥åœãªé床ã§åŠçãããŠããããšã確èªããå ŽåããããŸãããŸãã¯ããµãŒãããŒãã£APIãšå¯Ÿè©±ãããµãŒãã¹ã¯ãAPIã®å¿çæéãšãšã©ãŒçã確èªããå ŽåããããŸãã
ãã«ã¹ãã§ãã¯ã®å®è£
ãã«ã¹ãã§ãã¯ã®å®è£ ã«ã¯ãéåžžãæ¬¡ã®æé ãå«ãŸããŸãã
- ãã«ã¹åºæºã®å®çŸ©ïŒæ£åžžãªãµãŒãã¹ãæ§æãããã®ã決å®ããŸããããã«ã¯ãå¿çæéãCPU䜿çšçãã¡ã¢ãªäœ¿çšéãããŒã¿ããŒã¹æ¥ç¶ã¹ããŒã¿ã¹ãããã³å€éšãªãœãŒã¹ã®å¯çšæ§ãå«ãŸããå ŽåããããŸãã
- ãã«ã¹ãã§ãã¯EndpointãŸãã¯ã¹ã¯ãªããã®å®è£ ïŒãã«ã¹ãã§ãã¯ãå®è¡ããé©åãªã¹ããŒã¿ã¹ã³ãŒããŸãã¯çµäºã³ãŒããè¿ãEndpointïŒ`/health`ãªã©ïŒãŸãã¯ã¹ã¯ãªãããäœæããŸãã
- ãµãŒãã¹ãã£ã¹ã«ããªãŒããŒã«ã®æ§æïŒãµãŒãã¹ãã£ã¹ã«ããªãŒããŒã«ïŒConsulãEtcdãKubernetesãªã©ïŒãæ§æããŠããã«ã¹ãã§ãã¯ã宿çã«å®è¡ããããã«å¿ããŠãµãŒãã¹ã¬ãžã¹ããªãæŽæ°ããŸãã
- ãã«ã¹ãã§ãã¯çµæã®ç£èŠïŒãã«ã¹ãã§ãã¯çµæãç£èŠããŠãæœåšçãªåé¡ãç¹å®ããæ¯æ£æªçœ®ãè¬ããŸãã
ãã«ã¹ãã§ãã¯ã軜éã§ãããéå°ãªãªãœãŒã¹ãæ¶è²»ããªãããšãéèŠã§ãããã«ã¹ãã§ãã¯EndpointããçŽæ¥è€éãªæäœãå®è¡ããããå€éšããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããããããšã¯é¿ããŠãã ããã代ããã«ããµãŒãã¹ã®åºæ¬çãªæ©èœã®æ€èšŒã«çŠç¹ãåœãŠããã詳现ãªåæã«ã¯ä»ã®ç£èŠããŒã«ã䜿çšããŠãã ããã
ãã«ã¹ãã§ãã¯ã®ãã¹ããã©ã¯ãã£ã¹
ãã«ã¹ãã§ãã¯ãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹ã次ã«ç€ºããŸãã
- ãã«ã¹ãã§ãã¯ã軜éã«ä¿ã€ïŒãã«ã¹ãã§ãã¯ã¯é«éã§ãæ¶è²»ãããªãœãŒã¹ãæå°éã«æããå¿ èŠããããŸããè€éãªããžãã¯ãŸãã¯I/Oæäœã¯é¿ããŠãã ãããããªç§åäœã§å®äºãããã§ãã¯ãç®æããŸãã
- è€æ°ã®çš®é¡ã®ãã«ã¹ãã§ãã¯ã䜿çšããïŒããŸããŸãªçš®é¡ã®ãã«ã¹ãã§ãã¯ãçµã¿åãããŠããµãŒãã¹ã®ãã«ã¹ãããå æ¬çã«ææ¡ããŸããããšãã°ãHTTPãã«ã¹ãã§ãã¯ã䜿çšããŠãµãŒãã¹ã®åºæ¬çãªæ©èœã確èªããã³ãã³ãå®è¡ãã«ã¹ãã§ãã¯ã䜿çšããŠå€éšãªãœãŒã¹ã®å¯çšæ§ã確èªããŸãã
- äŸåé¢ä¿ãèæ ®ããïŒãµãŒãã¹ãä»ã®ãµãŒãã¹ãŸãã¯ãªãœãŒã¹ã«äŸåããŠããå Žåã¯ããããã®äŸåé¢ä¿ã®ãã§ãã¯ããã«ã¹ãã§ãã¯ã«å«ããŸããããã¯ããµãŒãã¹ã®ç¬èªã®ãã«ã¹ã¡ããªãã¯ããã¯ããã«ã¯ããããªãå¯èœæ§ã®ããåé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããããšãã°ããµãŒãã¹ãããŒã¿ããŒã¹ã«äŸåããŠããå Žåã¯ãããŒã¿ããŒã¹æ¥ç¶ãæ£åžžã§ããããšã確èªãããã§ãã¯ãå«ããŸãã
- é©åãªééãšã¿ã€ã ã¢ãŠãã䜿çšããïŒãµãŒãã¹ã«é©ãããã«ã¹ãã§ãã¯ééãšã¿ã€ã ã¢ãŠããæ§æããŸããééã¯ãåé¡ãè¿ éã«æ€åºããã®ã«ååãªé »åºŠã§ããå¿ èŠããããŸããããµãŒãã¹ã«äžå¿ èŠãªè² è·ããããã»ã©é »ç¹ã§ãã£ãŠã¯ãªããŸãããã¿ã€ã ã¢ãŠãã¯ããã«ã¹ãã§ãã¯ãå®äºããã®ã«ååãªé·ãã§ããå¿ èŠããããŸãããåé¡ã®æ€åºãé ãããã»ã©é·ãã¯ãããŸãããäžè¬çãªéå§ç¹ã¯10ç§ã®ééãš5ç§ã®ã¿ã€ã ã¢ãŠãã§ããããããã®å€ã¯ãç¹å®ã®ãµãŒãã¹ãšç°å¢ã«åºã¥ããŠèª¿æŽããå¿ èŠãããå ŽåããããŸãã
- äžæçãªãšã©ãŒãé©åã«åŠçããïŒäžæçãªãšã©ãŒãé©åã«åŠçããããã®ããžãã¯ãå®è£ ããŸãã1åã®ãã«ã¹ãã§ãã¯ã®å€±æã¯ãæ·±å»ãªåé¡ã瀺ããŠããããã§ã¯ãããŸããããããå€ãŸãã¯å詊è¡ã¡ã«ããºã ã䜿çšããŠããµãŒãã¹ããµãŒãã¹ã¬ãžã¹ããªããæ©æã«åé€ããããšãé¿ããŠãã ãããããšãã°ããµãŒãã¹ãç°åžžãšèŠãªããããŸã§ã«ã3åé£ç¶ããŠãã«ã¹ãã§ãã¯ã«å€±æããå¿ èŠãããå ŽåããããŸãã
- ãã«ã¹ãã§ãã¯Endpointãä¿è·ããïŒæ¿èªãããŠããªãã¢ã¯ã»ã¹ãããã«ã¹ãã§ãã¯Endpointãä¿è·ããŸãããã«ã¹ãã§ãã¯Endpointãå éšã¡ããªãã¯ãæ§æããŒã¿ãªã©ã®æ©å¯æ å ±ãå ¬éããå Žåã¯ãæ¿èªãããã¯ã©ã€ã¢ã³ãã®ã¿ã«ã¢ã¯ã»ã¹ãå¶éããŸããããã¯ãèªèšŒãŸãã¯IPãã¯ã€ããªã¹ãã䜿çšããŠå®çŸã§ããŸãã
- ãã«ã¹ãã§ãã¯ãããã¥ã¡ã³ãåããïŒåãã«ã¹ãã§ãã¯ã®ç®çãšå®è£ ãæç¢ºã«ããã¥ã¡ã³ãåããŸããããã¯ãä»ã®éçºè ããã«ã¹ãã§ãã¯ã®ä»çµã¿ãšåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°æ¹æ³ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãããã«ã¹åºæºããã«ã¹ãã§ãã¯EndpointãŸãã¯ã¹ã¯ãªãããããã³äºæãããã¹ããŒã¿ã¹ã³ãŒããŸãã¯çµäºã³ãŒãã«é¢ããæ å ±ãå«ããŸãã
- 修埩ãèªååããïŒãã«ã¹ãã§ãã¯ãèªå修埩ã·ã¹ãã ãšçµ±åããŸãããµãŒãã¹ãç°åžžãšããŠæ€åºãããå Žåã¯ããµãŒãã¹ãæ£åžžãªç¶æ ã«æ»ãããã®ã¢ã¯ã·ã§ã³ãèªåçã«ããªã¬ãŒããŸããããã«ã¯ããµãŒãã¹ã®åèµ·åãã€ã³ã¹ã¿ã³ã¹æ°ã®ã¹ã±ãŒã«ã¢ããããŸãã¯ä»¥åã®ããŒãžã§ã³ãžã®ããŒã«ããã¯ãå«ãŸããå ŽåããããŸãã
- å®éäžçã®ãã¹ãã䜿çšããïŒãã«ã¹ãã§ãã¯ã¯ãå®éã®ãŠãŒã¶ãŒãã©ãã£ãã¯ãšäŸåé¢ä¿ãã·ãã¥ã¬ãŒãããå¿ èŠããããŸãããµãŒããŒãå®è¡ãããŠãããã©ããã ãã§ãªããäžè¬çãªãªã¯ãšã¹ããåŠçããå¿ èŠãªãªãœãŒã¹ãšå¯Ÿè©±ã§ããããšã確èªããŠãã ããã
ããŸããŸãªãã¯ãããžãŒã«ãããäŸ
ããŸããŸãªãã¯ãããžãŒã«ããããã«ã¹ãã§ãã¯ã®å®è£ ã®äŸãèŠãŠã¿ãŸãããã
JavaïŒSpring BootïŒ
@RestController
public class HealthController {
@GetMapping("/health")
public ResponseEntity<String> health() {
// Perform checks here, e.g., database connection
boolean isHealthy = true; // Replace with actual check
if (isHealthy) {
return new ResponseEntity<>("OK", HttpStatus.OK);
} else {
return new ResponseEntity<>("Error", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
PythonïŒFlaskïŒ
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/health')
def health_check():
# Perform checks here
is_healthy = True # Replace with actual check
if is_healthy:
return jsonify({'status': 'OK'}), 200
else:
return jsonify({'status': 'Error'}), 500
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
Go
package main
import (
"fmt"
"net/http"
)
func healthHandler(w http.ResponseWriter, r *http.Request) {
// Perform checks here
isHealthy := true // Replace with actual check
if isHealthy {
w.WriteHeader(http.StatusOK)
fmt.Fprint(w, "OK")
} else {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprint(w, "Error")
}
}
func main() {
http.HandleFunc("/health", healthHandler)
fmt.Println("Server listening on port 8080")
http.ListenAndServe(":8080", nil)
}
ãã«ã¹ãã§ãã¯ãšããŒããã©ã³ã·ã³ã°
ãã«ã¹ãã§ãã¯ã¯ããã©ãã£ãã¯ãæ£åžžãªãµãŒãã¹ã«ã®ã¿ã«ãŒãã£ã³ã°ãããããã«ãããŒããã©ã³ã·ã³ã°ãœãªã¥ãŒã·ã§ã³ãšçµ±åãããããšããããããŸããããŒããã©ã³ãµãŒã¯ããã«ã¹ãã§ãã¯ã®çµæã䜿çšããŠããã©ãã£ãã¯ãåä¿¡ã§ãããµãŒãã¹ã倿ããŸãããµãŒãã¹ããã«ã¹ãã§ãã¯ã«å€±æãããšãããŒããã©ã³ãµãŒã¯èªåçã«å©çšå¯èœãªãµãŒãã¹ã®ããŒã«ããåé€ããŸããããã«ãããã¯ã©ã€ã¢ã³ããç°åžžãªãµãŒãã¹ã«ãªã¯ãšã¹ããéä¿¡ããã®ãé²ããã¢ããªã±ãŒã·ã§ã³å šäœã®ä¿¡é Œæ§ãåäžãããŸãã
ãã«ã¹ãã§ãã¯ãšçµ±åãããããŒããã©ã³ãµãŒã®äŸã次ã«ç€ºããŸãã
- HAProxy
- NGINX Plus
- Amazon ELB
- Google Cloud Load Balancing
- Azure Load Balancer
ã¢ãã¿ãªã³ã°ãšã¢ã©ãŒã
ãµãŒãã¹ã¬ãžã¹ããªããç°åžžãªãµãŒãã¹ãèªåçã«åé€ããããšã«å ããŠããã«ã¹ãã§ãã¯ã䜿çšããŠã¢ã©ãŒããšéç¥ãããªã¬ãŒããããšãã§ããŸãããµãŒãã¹ããã«ã¹ãã§ãã¯ã«å€±æãããšãç£èŠã·ã¹ãã ã¯éçšããŒã ã«ã¢ã©ãŒããéä¿¡ããæœåšçãªåé¡ãéç¥ã§ããŸããããã«ãããåé¡ã調æ»ãããŠãŒã¶ãŒã«åœ±é¿ãäžããåã«æ¯æ£æªçœ®ãè¬ããããšãã§ããŸãã
ãã«ã¹ãã§ãã¯ãšçµ±åãããäžè¬çãªç£èŠããŒã«ã次ã«ç€ºããŸãã
- Prometheus
- Datadog
- New Relic
- Grafana
- Nagios
çµè«
ãã«ã¹ãã§ãã¯ã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ããããµãŒãã¹ãã£ã¹ã«ããªãŒã®äžå¯æ¬ ãªã³ã³ããŒãã³ãã§ãããµãŒãã¹ã®ãã«ã¹ãç¶ç¶çã«ç£èŠãããµãŒãã¹ã¬ãžã¹ããªããç°åžžãªã€ã³ã¹ã¿ã³ã¹ãèªåçã«åé€ããæ¹æ³ãæäŸããŸããå ç¢ãªãã«ã¹ãã§ãã¯ã¡ã«ããºã ãå®è£ ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ãå埩åããããã¹ã±ãŒã©ãã«ã§ãä¿¡é Œæ§ãé«ããªãããã«ããããšãã§ããŸããé©åãªçš®é¡ã®ãã«ã¹ãã§ãã¯ãéžæããé©åã«æ§æããç£èŠããã³ã¢ã©ãŒãã·ã¹ãã ãšçµ±åããããšããå¥å šã§å ç¢ãªãã€ã¯ããµãŒãã¹ç°å¢ãæ§ç¯ããããã®éµãšãªããŸãã
ãã«ã¹ã¢ãã¿ãªã³ã°ãžã®ããã¢ã¯ãã£ããªã¢ãããŒããæ¡çšããŠãã ããããŠãŒã¶ãŒãåé¡ãå ±åããã®ãåŸ ããªãã§ãã ããããµãŒãã¹ã®ãã«ã¹ãç¶ç¶çã«ç£èŠããåé¡ãçºçãããšãã«èªåçã«æ¯æ£æªçœ®ãè¬ããå æ¬çãªãã«ã¹ãã§ãã¯ãå®è£ ããŸããããã¯ãåçã§åæ£ããç°å¢ã®èª²é¡ã«èããããšãã§ãããå埩åãããä¿¡é Œæ§ã®é«ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãæ§ç¯ããã®ã«åœ¹ç«ã¡ãŸããé²åããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºãšäŸåé¢ä¿ã«å¯Ÿå¿ããããã«ããã«ã¹ãã§ãã¯ã宿çã«èŠçŽããæŽæ°ããŸãã
æçµçã«ãå ç¢ãªãã«ã¹ãã§ãã¯ã¡ã«ããºã ãžã®æè³ã¯ããã€ã¯ããµãŒãã¹ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãå¯çšæ§ãããã³å šäœçãªæåãžã®æè³ãšãªããŸãã