ÔõÑùʹÓÃDocker¾ÙÐÐÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí
ÔõÑùʹÓÃDocker¾ÙÐÐÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí
Ò»¡¢Ð¡Ðò
Ëæ×ÅÈÝÆ÷ÊÖÒÕµÄÆÕ±éÓ¦Óã¬ÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí±äµÃÓú·¢Ö÷Òª¡£DockerÊÇÏÖÔÚ×îÊ¢ÐеÄÈÝÆ÷ÖÎÀíƽ̨֮һ£¬±¾ÎĽ«ÏÈÈÝÔõÑùʹÓÃDocker¾ÙÐÐÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí£¬²¢¸ø³öÏêϸµÄ´úÂëʾÀý¡£
¶þ¡¢¼à¿ØDockerÈÝÆ÷
ʹÓÃDocker Stats API
Docker Stats APIÊÇDockerÌṩµÄÒ»¸öÓÃÓÚ»ñÈ¡ÈÝÆ÷ͳ¼ÆÐÅÏ¢µÄAPI¡£ÎÒÃÇ¿ÉÒÔͨ¹ýŲÓøÃAPI»ñÈ¡ÈÝÆ÷µÄ¸÷ÏîÖ¸±ê£¬²¢¾ÙÐмà¿Ø¡£
Ïêϸ´úÂëʾÀýÈçÏ£º
import docker client = docker.DockerClient(base_url='unix://var/run/docker.sock') def monitor_container(container_id): container = client.containers.get(container_id) stats = container.stats(stream=False) print(stats) if __name__ == '__main__': monitor_container('CONTAINER_ID')
µÇ¼ºó¸´ÖÆ
ʹÓÃPrometheusºÍcAdvisor
PrometheusÊÇÒ»¸ö¿ªÔ´µÄ¼à¿Øϵͳ£¬¶øcAdvisorÊÇÓÃÓÚ¼à¿ØÈÝÆ÷µÄ¹¤¾ß¡£ÍŽáÕâÁ½¸ö¹¤¾ß£¬ÎÒÃÇ¿ÉÒÔʵÏÖ¶ÔÈÝÆ÷µÄÖÜÈ«¼à¿Ø¡£
Ïêϸ´úÂëʾÀýÈçÏ£º
Ê×ÏÈ£¬ÎÒÃÇÐèҪװÖò¢Æô¶¯PrometheusºÍcAdvisor¡£È»ºóÔÚPrometheusµÄÉèÖÃÎļþprometheus.ymlÖÐÌí¼ÓÒÔÏÂÄÚÈÝ£º
scrape_configs: - job_name: 'cadvisor' scrape_interval: 5s static_configs: - targets: ['cadvisor:8080']
µÇ¼ºó¸´ÖÆ
½ÓÏÂÀ´£¬ÔÚPythonÖÐʹÓÃPrometheusÌṩµÄ¿Í»§¶Ë¿âÀ´ÅÌÎʲ¢´¦ÀíÈÝÆ÷µÄ¼à¿ØÊý¾Ý¡£Ïêϸ´úÂëʾÀýÈçÏ£º
from prometheus_api_client import PrometheusConnect prometheus = PrometheusConnect(url='http://localhost:9090') def get_container_cpu_usage(container_id): query = 'sum(rate(container_cpu_usage_seconds_total{container_label_com_docker_swarm_service_id="%s"}[5m]))' % (container_id) result = prometheus.custom_query(query) return result['data']['result'] if __name__ == '__main__': container_id = 'CONTAINER_ID' cpu_usage = get_container_cpu_usage(container_id) print(cpu_usage)
µÇ¼ºó¸´ÖÆ
Èý¡¢¸æ¾¯´¦Àí
ʹÓÃDocker Stats APIºÍÓʼþ¸æ¾¯
ʹÓÃDocker Stats API»ñÈ¡ÈÝÆ÷µÄ¼à¿ØÊý¾Ý£¬²¢Æ¾Ö¤ÎÒÃÇÉ趨µÄãÐÖµ¾ÙÐи澯´¦Àí¡£ÈôÊÇÈÝÆ÷µÄijÏîÖ¸±êÁè¼ÝÁËÉ趨µÄãÐÖµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÓʼþ·¢Ë͸澯ÐÅÏ¢¡£
Ïêϸ´úÂëʾÀýÈçÏ£º
import docker import smtplib from email.mime.text import MIMEText client = docker.DockerClient(base_url='unix://var/run/docker.sock') def monitor_container(container_id): container = client.containers.get(container_id) stats = container.stats(stream=False) # ¼ì²éij¸öÖ¸±êÊÇ·ñÁè¼ÝãÐÖµ£¬ÕâÀïÒÔCPUʹÓÃÂÊΪÀý cpu_usage = stats['cpu_stats']['cpu_usage']['total_usage'] cpu_limit = stats['cpu_stats']['cpu_usage']['percpu_usage'].size cpu_usage_percent = cpu_usage / cpu_limit * 100 if cpu_usage_percent > 80: send_alert_email(container_id, cpu_usage_percent) def send_alert_email(container_id, cpu_usage_percent): msg = MIMEText('ÈÝÆ÷ %s µÄCPUʹÓÃÂÊÁè¼Ý80%%£¬Ä¿½ñʹÓÃÂÊΪ%.2f%%' % (container_id, cpu_usage_percent), 'plain', 'utf-8') msg['Subject'] = 'ÈÝÆ÷¸æ¾¯' msg['From'] = 'alert@example.com' msg['To'] = 'admin@example.com' server = smtplib.SMTP('smtp.example.com') server.login('username', 'password') server.sendmail('alert@example.com', ['admin@example.com'], msg.as_string()) server.quit() if __name__ == '__main__': monitor_container('CONTAINER_ID')
µÇ¼ºó¸´ÖÆ
ʹÓÃPrometheusºÍAlertmanager
PrometheusÌṩÁËÒ»¸öÃûΪAlertmanagerµÄ×é¼þ£¬ÓÃÓÚ´¦ÀíºÍ·¢Ë͸澯֪ͨ¡£ÎÒÃÇ¿ÉÒÔʹÓÃËüÀ´¼à¿ØÈÝÆ÷µÄÖ¸±ê²¢Æ¾Ö¤É趨µÄ¹æÔò·¢ËÍÏìÓ¦µÄ¸æ¾¯Í¨Öª¡£
Ïêϸ´úÂëʾÀýÂÔ¡£
ËÄ¡¢×ܽá
±¾ÎÄÏÈÈÝÁËÔõÑùʹÓÃDocker¾ÙÐÐÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí£¬²¢¸ø³öÁËÏêϸµÄ´úÂëʾÀý¡£ÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦Àí¹ØÓÚ°ü¹ÜÈÝÆ÷ÔËÐеÄÎȹÌÐԺͿɿ¿ÐÔºÜÊÇÖ÷Òª£¬Ï£Íû±¾ÎĶÔÄúÓÐËù×ÊÖú¡£
ÒÔÉϾÍÊÇÔõÑùʹÓÃDocker¾ÙÐÐÈÝÆ÷µÄ¼à¿ØºÍ¸æ¾¯´¦ÀíµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡