如何从Nagios设置Docker Container的监控

时间:2015-07-10 14:03:55

标签: bash docker nagios

我正在尝试从nagios设置docker容器的监视。我的nagios在一个VM上,而我的docker在另一个VM上。所以为了监控docker我正在尝试使用the shell script below

#!/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家伙,我真的不太了解这个

任何人都可以告诉我如何实现监控码头工作的任务,因为我已经浪费了我的时间

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是来自复制/粘贴的意外eol字符。

这实际上是一个Bash问题,或者更具体......它最后是一个特殊字符,您可能无法看到,因为您可能会从网站上复制/粘贴。

问题原因:

很多网站都提到了eol问题,但look here提到了一些简短而重要的事情。

  

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

<强>解决方案:

要修复unix样式eol的行结尾,请运行dos2unix file.sh,但您可能需要先安装该实用程序。在Ubuntu中它将是sudo apt-get install dos2unix。根据环境的不同,它可能与您相同。

<强>备选方案:

如果您想确切了解最后的内容,可以在 Windows 上查看Notepad ++,因为它了解各种格式的eol字符。您需要在菜单中启用所有字符。

Notepad++ eol setting

Linux 上,Emacs Whitespace mode会显示相同的内容:

使用M-x whitespace-mode RET在本地切换或查看(许多)详细信息和示例的链接。