Docker应用的可视化监控管理

本文介绍一个开源项目Weave Scope,项目地址是https://github.com/weaveworks/scope。Weave Scope这个项目会自动生成容器之间的关系图,方便理解容器之间的关系,也方便监控容器化和微服务化的应用。
首先,我们在一台机器上面安装Docker,然后安装Weave Scope项目。

sudo wget -O /usr/local/bin/scope https://git.io/scope
sudo chmod a+x /usr/local/bin/scope
sudo scope launch

上面的脚本会从Docker Hub上面下载最新的Scope镜像,然后我们在Web浏览器中输入http://ip:4040,我们就会看到下面所示页面。

visualization01-1024x549.png

在页面中可以按照进程视图、容器视图和主机视图进行呈现,并且可以进行查询。

如果选择的是容器视图,那么在左下角可以根据容器属性进行过滤,可以只显示系统容器,或者只显示应用容器,或者同时显示系统容器和应用容器,在左下角还可以根据容器状态进行过滤,可以只显示停止状态的容器,或者只显示运行状态的容器,或者同时显示停止状态和运行状态的容器。

下图是在容器视图中展现停止状态的应用容器:

visualization02-1024x723.png

在容器视图可以按照DNS名称和镜像进行归类展现,下图是对上图中停止状态的应用容器按照镜像进行归类展现:

visualization03-1024x828.png

下图是在容器视图上展现运行状态的应用容器,可以看到机器38dad64f上面存在两个运行状态的应用容器,分别是wordpress-db和wordpress-app,这两个容器的作用会在下面详细介绍:

visualization04.png

可以在左下角选择监控CPU使用率或者内存使用率:

visualization05.png

下图是选择监控CPU使用率后的界面,选择wordpress-db容器后,会显示CPU使用率:

visualization06.png

下图是选择监控内存使用率后的界面,选择wordpress-db容器后,会显示内存使用率:

visualization07.png

当用鼠标左键点击wordpress-db容器后,会显示这个容器的详细信息,如下图所示:

visualization08-600x1024.png

在容器详细信息页面,可以点击“docker.io/mysql”查看镜像详细信息:

visualization09.png

也可以点击“38dad64f”查看主机详细信息:

visualization10-409x1024.png

当在主界面中选择主机视图,那么可以对主机进行图形展现,如下图所示:

visualization11.png

在主机视图中,可以在左下角选择按CPU使用率、负载、内存使用率进行监控:

visualization12-300x61.png

在主机视图中,也可以用鼠标左键点击主机“38dad64f”,显示主机“38dad64f”的详细信息。

在进程视图中,可以展现主机上scope进程的信息:

visualization13.png

在进程视图中,可以在左下角选择按CPU使用率、内存使用率、打开文件数进行监控:

visualization14-300x52.png

如果选择按照打开文件数进行监控,那么如下图所示,可以看到scope-probe进程打开了17个文件,scope-app进程打开了9个文件:

visualization15.png

用鼠标左键点击scope-probe进程,可以看到这个进程的详细信息,如下图所示:

visualization16.png

在主界面右下角,可以对Scope监控进行简单的设置:

  1. 可以暂停监控布局变化,暂停后页面就不会实时进行变化,这样页面中的图形元素就可以保持不变;
  2. 可以强制重绘监控布局,这样就可以不用等下一个重绘时间点;
  3. 可以将监控内容保存成SVG格式文件;
  4. 可以将监控数据保存成JSON格式文件;
  5. 可以将展现图形切换成高对比样式,如下图所示:

    visualization17.png

Weave Scope这个项目还会自动呈现容器之间的关系,方便监控容器化和微服务化的应用。在上面的例子中,可以看到机器38dad64f上面存在两个运行状态的应用容器,分别是wordpress-db和wordpress-app,其中wordpress-db是一个mysql应用容器,wordpress-app是一个WordPress应用容器,服务端口是10080,WordPress应用容器需要使用MySQL应用容器,现在已经安装好了wordpress-app容器,但是对wordpress还没有进行安装配置,现在容器视图中界面如下:

visualization18-1024x598.png

当在浏览器中输入http://ip:10080,并对WordPress进行安装配置时,容器视图中界面如下,可以看到Scope监控到有outbound连接请求,促使wordpress-app进行inbound连接:

visualization19-1024x857.png

在安装配置好WordPress后,进入WordPress登录界面,这时候在Scope的进程视图中可以看到多了一个Apache进程,这个进程就是提供WordPress的Web服务:

visualization20-1024x476.png

我们登录到WordPress中,对WordPress进行升级,WordPress升级界面如下:

visualization21-1024x605.png

此时我们在Scope容器视图中查看,可以看到wordpress-app同wordpress-db两个容器之间有通讯,这是因为WordPress升级过程中需要操作MySQL数据库,也就是说需要同wordpress-db进行通讯。

visualization22-1024x812.png

上面介绍的是在主机上安装Scope的例子,Scope还可以安装在Kubernetes上,还可以安装在Amazon ECS上,还可以安装在DC/OS上。

综上所述,一旦我们将应用容器化之后,传统的应用监控可能不起作用了,需要我们采用新的方式来监控应用、监控进程、监控容器,通过Weave Scope这个项目,可以方便的监控容器之间的关系,也方便监控容器化和微服务化的应用,帮助我们了解应用和容器的运行状况。

原文链接:Docker应用的可视化监控管理,作者:马俊,天云软件产品总监。

Posted in Docker.

进入container

如果想进入container内部一探究竟, 那么你需要下边几个命令:

1. 提前安装好nsenter

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

2. 获取pid

docker inspect -f  '{{ .State.Pid }}'  $containerId

3. 进入

sudo nsenter --target $pid --mount --uts --ipc --net --pid

 

给出一个实例:

 

image

Posted in Uncategorized. Tagged with , .

Redhat 的 yum国内源

 

由于原生Redhat的yum源需要收费提供, 故一般大家都会使用Centos源, 这是因为centos本身就是基于Redhat编译的,故两者可以混用,

在Redhat6.* 情况下,您只需要

vi /etc/yum.repo.d/Centor.Base.repo

 

然后粘贴以下内容,之后执行yum clean all   yum makecache 即可

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-6.3 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/os/$basearch/

http://mirrors.aliyuncs.com/centos/6/os/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=6.3&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-6.3 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/updates/$basearch/

http://mirrors.aliyuncs.com/centos/6/updates/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=6.3&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-6.3 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/extras/$basearch/

http://mirrors.aliyuncs.com/centos/6/extras/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=6.3&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6.3 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/centosplus/$basearch/

http://mirrors.aliyuncs.com/centos/6/centosplus/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=6.3&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-6.3 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/contrib/$basearch/

http://mirrors.aliyuncs.com/centos6/contrib/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=6.3&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
Posted in Linux/Unix.

解决Linux下的应用安装问题勿忘使用aptitude

 

在Linux下安装程序几乎难有几次是顺利的, 每次都有冲突问题发现, 此时如果继续耗在apt-get上那简直就是浪费时间,所幸还有一个工具可供使用

 

aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。以下是笔者总结的一些常用 aptitude 命令,仅供参考。
命令 作用
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
当然,你也可以在文本界面模式中使用 aptitude。

Posted in Linux/Unix.

使用git clone获取openshift包permission denied错误

在我的一台ubuntu机器上通过git获取openshift代码时候一直报以下错误:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

 

但是直接ssh访问却是可以的,百思不得其解。

突然间想到莫非是因为加了sudo的缘故, 因为如果我不加sudo系统会报没有创建文件夹的权限,按照sudo git关键字查询,发现还真是如此:

https://help.github.com/articles/error-permission-denied-publickey/

https://gist.github.com/scottjacobsen/4281310

解决方法也比较简单:

sudo git clone git@github.com:my-github-account/my-repo.git

修改为

sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK git clone git@github.com:my-github-account/my-repo.git

Posted in Linux/Unix, 其他知识.