首页 理论教育 微服务运维实战:探索日志

微服务运维实战:探索日志

时间:2023-11-06 理论教育 版权反馈
【摘要】:请执行docker service ls命令以确认两个服务都有副本正在运行。最后,我们定义了一些标签,这些标签将被swarm-listener用来通知proxy服务的存在,这次com.df.servicePath标签有三条匹配Kibana使用的路径。默认情况下,Kibana会显示过去15分钟内生成的日志。相反,我们将过滤日志以显示包含单词proxy的程序的所有日志。结果是只有在程序名称字段中包含proxy_proxy的日志显示在屏幕的主要部分。我们得到了与在搜索栏中输入program:"proxy.1.4psvagyv4bky2lftjg4a:"相同的结果。有关更多的信息,请参阅Kibana文档的Filtering by Field部分。

微服务运维实战:探索日志

将所有日志放在中央数据库中是一个良好的开端,但它不能让我们以简单的和用户友好的方式探索它们。我们不能指望开发人员调用ElasticSearch API来调查哪里出了问题。我们需要一个允许我们可视化并过滤日志的UI,需要ELK协议栈中的K。

给Windows用户的说明

你可能会遇到使用Docker Compose不能正确映射卷的问题。如果你看到的是Invalid volume specification错误,则请设置环境变量COMPOSE_CONVERT_ WINDOWS_PATHS为0:

请确保每次运行docker-compose或者docker stack deploy的时候已经设置了该变量。

让我们再创建一个服务,这次是Kibana。除了需要此服务与logspout和elasticsearch服务进行通信外,还希望通过代理将其公开,因此还将创建swarm-listener和proxy服务。让我们来看看:

我们创建了proxy网络,下载了含有服务定义的Compose文件,并部署了由swarm-listener和proxy服务组成的proxy栈。它们与我们在第8章中执行的命令相同,因此不需要再次解释。

在创建kibana服务之前唯一缺少的东西是等到swarm-listener和proxy都启动并运行。

请执行docker service ls命令以确认两个服务都有副本正在运行。

现在准备创建kibana服务了。

给Windows用户的说明

Git Bash会把文件系统路径替换掉,为了防止替换,请在运行代码块之前执行以下命令:

将它连接到elk和proxy网络,连接第一个是因为需要与elasticsearch服务进行通信,而连接第二个则需要与proxy进行通信。我们还设置了ELASTICSEARCH_URL环境变量,它告诉了Kibana数据库的地址,并保留了50m的内存。最后,我们定义了一些标签,这些标签将被swarm-listener用来通知proxy服务的存在,这次com.df.servicePath标签有三条匹配Kibana使用的路径。

在打开UI之前,让我们确认kibana正在运行:

用户界面可以通过以下命令打开:

让我们克隆代码并运行脚本。

给Windows用户的说明

Git Bash可能不支持open命令,如果真是这样的话,请执行docker-machine ip <SERVER_NAME>来查找机器的IP,然后直接在浏览器里打开URL,比如上面的命令应该被替换为docker-machine ip swarm-1。如果命令输出的是1.2.3.4,则应该在浏览器里打开http://1.2.3.4:8082/jenkins。

应该看到让你配置ElasticSearch索引的界面。

现在可以通过点击顶部菜单中的“Discover”按钮来浏览日志。

默认情况下,Kibana会显示过去15分钟内生成的日志。根据产出日志后所经过的时间,15分钟可能会比实际的时间短。我们会把这个时间段增加到24小时。

请选择@timestamp作为Time-field name,然后点击“Create”按钮以在ElasticSearch中生成LogStash的索引,如图9-1所示。

图9-1 Kiana配置索引模式的界面

请点击右上角菜单中的Last 15 minutes,可以看到基于时间来过滤结果的众多选项。

请点击Last 24 hours链接,并观察右上角菜单的时间的变化。现在点击“Last 24 hours”按钮来隐藏过滤器,如图9-2所示。

更多的信息可以在Kibana文档的Setting the Time Filter (https://www.elastic.co/guide/en/kibana/current/discover.html#set-time-filter)部分找到:

图9-2 Kibanas Discover界面的时间过滤(www.xing528.com)

此时,屏幕的中央部分显示所有符合给定时间跨度的日志。大多数情况下,在“真实”生产系统中,我们不会对集群内部生成的所有日志都感兴趣。相反,我们会根据一些标准对其进行过滤。

假设我们想查看proxy服务生成的所有日志,通常不需要知道生成日志的程序的确切名称,实际上也是这样,因为Swarm会将一个实例号和一个hashtag添加到容器名称中,所以通常不能确定确切的名称是什么,或者哪个实例发生了问题。相反,我们将过滤日志以显示包含单词proxy的程序的所有日志。

请在位于界面上半部分的搜索栏中输入program:"proxy_proxy",然后按回车键。结果是只有在程序名称字段中包含proxy_proxy的日志显示在屏幕的主要部分。同样,可以将搜索更改为之前的状态,并列出与给定时间范围相匹配的所有日志。我们所要做的就是在搜索栏中输入*并按回车键。

有关更多信息,请参阅Kibanas文档的Searching Your Data(https://www.elastic.co/guide/en/kibana/current/discover.html#search)部分。

与当前查询匹配的所有字段列表位于左侧菜单中。点击它可以看到其中一个字段的最匹配值。例如,可以单击program字段并查看在指定时间内生成日志的所有程序。我们可以使用这些值作为过滤结果的另一种方式。请点击proxy.1.4psvagyv4bky2lftjg4a旁边的+号(在这样的情况下,哈希值将不一样)。我们得到了与在搜索栏中输入program:"proxy.1.4psvagyv4bky2lftjg4a:"相同的结果。

有关更多的信息,请参阅Kibana文档的Filtering by Field(https://www.elastic.co/guide/en/kibana/current/discover.html#field-filter)部分。

界面主体可显示每行中的选定字段,并可选择查看并显示所有信息。事实上,默认字段(Time和_source)的用处不大,所以我们会将其改掉。

请点击左侧菜单中program旁边的“Add”按钮,你会看到program列被添加到Time列中。请重复这个过程添加host和@timestamp字段,如图9-3所示。

要查看有关特定条目的更多信息,请单击指向右侧的箭头。包含所有字段的表格将显示在其下方,你将能够浏览与特定日志条目相关的所有详细信息。

有关更多的信息,请参阅Kibana文档的Filtering by Field(https://www.elastic.co/guide/en/kibana/current/discover.html#document-data)部分。

图9-3 Kibana的Discover页面

在围绕Kibana的短途体验中,唯一剩下的就是保存刚创建的过滤器,请单击顶部菜单中的“Save Search”按钮以保存现在创建的内容。键入搜索名称,然后单击“Save”按钮。你的过滤器现已保存,并且可通过顶部菜单中的“Load Saved Search”按钮进行访问。

就这样,现在你已经了解了如何探索存储在ElasticSearch中的日志的基础知识。如果你想知道可视化和看板界面能做什么,我只能说它们对于日志不是很有用;如果开始添加其他类型的信息,如资源使用情况(例如,内存、CPU、网络流量等),那么它们会变得更有趣。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈