我如何设置从Nagios监控Docker容器

我试图build立从nagios监控docker容器。我的nagios在一个虚拟机,我的docker在另一个虚拟机。 所以要监视泊坞窗我想使用下面的shell脚本 :

#!/bin/bash # Author: Erik Kristensen # Email: erik@erikkristensen.com # License: MIT # Nagios Usage: check_nrpe!check_docker_container!_container_id_ # Usage: ./check_docker_container.sh _container_id_ # # The script checks if a container is running. # OK - running # WARNING - container is ghosted # CRITICAL - container is stopped # UNKNOWN - does not exist CONTAINER=$1 RUNNING=$(docker inspect --format="{{ .State.Running }}" $CONTAINER 2> /dev/null) if [ $? -eq 1 ]; then echo "UNKNOWN - $CONTAINER does not exist." exit 3 fi if [ "$RUNNING" == "false" ]; then echo "CRITICAL - $CONTAINER is not running." exit 2 fi GHOST=$(docker inspect --format="{{ .State.Ghost }}" $CONTAINER) if [ "$GHOST" == "true" ]; then echo "WARNING - $CONTAINER has been ghosted." exit 1 fi STARTED=$(docker inspect --format="{{ .State.StartedAt }}" $CONTAINER) NETWORK=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" $CONTAINER) echo "OK - $CONTAINER is running. IP: $NETWORK, StartedAt: $STARTED" 

并将文件放在位置/ usr / lib64 / nagios / plugins /中,但在运行此脚本时,它倾向于抛出错误。

错误:

check_docker:第40行:语法错误:意外的文件结束

作为一个java的家伙,我真的不知道这个

那么有谁能告诉我怎样才能完成监控docker工的任务,因为我已经浪费了时间

提前感谢您的帮助。

问题是从复制/粘贴意外的EOL字符。

这实际上是一个Bash问题,或更具体的…这是一个特殊的字符,你可能看不到,因为你可能从一个网站复制/粘贴。

问题的原因:

很多网站都提到了问题,但是在这里寻找一些简短的内容。

DOS使用回车符和换行符("\r\n")作为行尾,而Unix只使用换行符("\n") 。 您需要小心在Windows机器和Unix机器之间传输文件,以确保行结束正确翻译。

解:

要修复unix风格的eol的行尾,运行dos2unix file.sh但是可能需要先安装实用程序。 在Ubuntu中,它将是sudo apt-get install dos2unix 。 取决于环境,它可能是一样的你。

备择scheme:

如果你想知道到底是什么,你可以看看Windows上的Notepad ++,因为它可以理解各种格式的eol字符。 您需要启用菜单中的所有字符。

记事本++ eol设置

Linux上 , Emacs的空白模式将显示相同的事情:

Mx whitespace-mode RET在本地切换或查看( 许多 )细节和示例的链接。