在我的上一篇文章中,我分享了ELK栈可以为您的应用程序带来多少价值,因为它为您提供了监控功能。
在这篇文章中,我将带您了解如何将Go应用程序与elk集成,elk有哪些不同的部分,它们是如何工作的,以及如何为它们创建基本配置。
对于坞站,请按照此处适用于您的平台的安装说明进行操作。对于坞站组合,请按照此处的安装说明操作。
目前,repo只有一个main.go文件,该文件以一定的间隔记录随机日志行。有时,它会传播错误日志行。
这是三种不同的工具,由Elastic公司创建,通常一起使用,使开发人员和系统管理员能够根据应用程序或系统日志监控生产系统。
Beats是一组经过微调的小程序,可以收集不同类型的日志数据-例如,从文件、从操作系统日志、从Windows事件日志等。
由于ELBK听起来没有ELK那么花哨,我们仍然将该堆栈称为ELK堆栈。
在接下来的几节中,我们将分别研究这些组件中的每一个,并相应地安装它们(amp;Install)。
这可以是任何JSON序列化对象。例如,这可用于在应用程序中创建面向用户的搜索栏。
您可以将这项工作外包给ElasticSearch,这将比我们两个都做得好得多,而不是手动处理糟糕的字符串。
但是,在我们的用例中,我们将使用Elasticsearch来存储结构化日志。结构化日志是将其内容组织到JSON对象中的日志。
使用结构化日志,您可以稍后索引这些键,并快速无缝地分析大量日志。这正是麋鹿堆栈提供的功能。
特别是,ElasticSearch将以优化的方式存储此日志行,以便稍后进行搜索和分析。
要安装ElasticSearch,首先在repo的根目录下创建一个docker-compose.yml文件,并添加以下初始YAML:
在本例中,我们只调出一个名为ElasticSearch的服务。您可以选择任何您喜欢的名称,但考虑到它的作用,这个名称最具描述性。
这意味着我们正在使用给定的版本拉取一个已经设置好的坞站映像。
这使我们不必费心从头开始设置图像。已经有人提供了开箱即用的功能,所以我们正在重用它。
否则,您将不得不费心地设置环境、安装依赖项、配置它们、手动安装ElasticSearch等。
通过此行,我们表示本地目录./config/elasticsearch.yml将挂载在/usr/Share/Elasticsearch/…上。并且它将是只读的(由ro标志指示)。
此部分指定我们将通过运行以下命令对容器进行运行状况检查:
我们总共将进行10次重试,如果所有重试都失败,docker会将此容器标记为不健康,并通知依赖的容器。
配置的最后一部分将容器的内部9200端口映射到实际的9200端口:
这就是我们需要为ElasticSearch添加到docker-compose.yml的全部内容。最后,将此配置添加到./config/astic ticsearch.yml中:
通常,ElasticSearch在节点群集中运行,其中包含必须配置的主和从节点。
为了使本练习简单易懂,我们将使用单个ElasticSearch节点。
如果一切正常,您应该会在一段时间后开始看到ElasticSearch日志,并且容器应该不会显示任何错误行或任何指向问题的内容:
此时,请记住可能会弹出一些问题。
如果一切顺利,您可以继续堆栈中的下一个组件-logstash。
实际上,您可以直接与ElasticSearch交互,但是logstash通常用作一个有用的中介,以节省您在应用程序端的一些工作。
与前面一样,我们将./config/logstash.conf文件挂载到logstash的默认配置位置。
最后,Dependers_on部分指出,只有当ElasticSearch服务启动并且运行正常时,该服务才应该启动。
输入部分指定logstash从何处接受数据。它有一个名为beats的内置插件,可以自动与我们稍后使用的文件节拍等beats应用程序集成。
在这里,我们表示将在端口5044上接受来自BEATS应用程序的输入。
在筛选器部分中,您可以添加任何自定义筛选器或映射(例如,以自定义格式将一个输入字段转换为另一个)。
在这里,我们只指定源结构化日志将来自Message字段,该字段是filebeat存储实际应用程序日志的缺省键。
这将使我们能够索引日志中的自定义应用程序密钥,而不仅仅是通过fileBeat和/或logstash插入的密钥。
默认情况下,它可以连接到ElasticSearch(就像我们在这里所做的那样),并通过其默认端口9200与其集成。
如果将ElasticSearch的默认端口更改为其他端口,则还必须修改此部分。
现在同时运行ElasticSearch和logstash,并确保它们都启动时没有任何问题:
FileBeat是一个BEATS应用程序(还有更多),它负责监视日志文件中的更改并将其转发到logstash。
如果没有fileBeat,您将不得不自己管理应用程序与logstash的集成。
它的工作方式是-您指定它应该监视的日志的路径&它将定期处理将这些日志传播到logstash。
大部分新的部分与我们为其余服务所做的工作非常相似。
这两项新服务都依赖于ElasticSearch的健康状况,都依赖于各自的基线扩展底座图像。
对于我们的Go应用程序,我们已经将当前目录挂载到容器的GOPATH的子目录中。
除此之外,我们还在容器的标准config目录中挂载了文件节拍配置。
对于我们的Go应用程序,我们还指定容器设置完成后,我们将通过以下命令运行我们的应用程序:
此配置指定服务将侦听/logs中所有日志文件的更改。此外,它还将通过端口5044将所有新的日志记录信息输出到logstash。
对于来自BEATS应用程序的输入,我们还在logstash服务配置中将该端口列入白名单。
设置的最后一块是Kibana。它是用于分析存储在Elasticsearch中的数据的前端。
有了它,您可以通过图形、饼图、数据表等可视化大量的数据,以便通过应用程序的日志监视应用程序中发生的事情。
它安装基线扩展坞镜像,依赖于ElasticSearch,拥有自己的运行状况检查,并将其内部端口5601映射到机器的实际端口5601。
除此之外,您还可以选择添加您的golang应用程序对kibana的依赖关系,以确保您的整个容器堆栈只有在kibana的服务器准备好之后才会启动:
现在,您应该能够转到http://localhost:5601/app/kibana并看到Kibana的主页加载。
如果您没有执行最后一个可选步骤,则可能需要等待一段时间才能启动Kibana:
在最后一节中,我们将通过Kibana搜索我们的应用程序日志来测试一切是否正确集成。
现在,您应该已经很好地理解了ELK堆栈是如何工作的&以及它的每个不同组件。此外,您现在应该很好地掌握了如何正确配置ELK设置&将其连接到GO应用程序。
从这里开始,您可以根据您的数据设置有用的仪表板,开始使用Kibana。