通过优锐课的java学习分享中,在本教程中,我们将了解如何使用这些工具来收集日志并通过Elasticsearch + Logstash + Kibana(又名ELK)对其进行管理。
开发网络应用程序时,我喜欢参考十二要素应用程序建议。 他们处理应用程序日志的方法在第十一条“命令”中:
它不应尝试写入或管理日志文件。 而是,每个正在运行的进程将其未缓冲的事件流写入stdout。
似乎Docker的人们也阅读了此宣言,从而为我们提供了出色的工具来管理容器中应用程序生成的日志。 在本教程中,我们将了解如何使用这些工具来收集日志并通过Elasticsearch + Logstash + Kibana(又名ELK)对其进行管理。
你将学到什么
在这篇文章中,我将介绍:
ELK的简要说明。
如何在Exoscale帐户上创建所需的计算机:一台用于承载ELK堆栈,另一台用于承载演示Web应用程序。
如何使用Docker compose启动ELK。
如何使用Docker日志记录驱动程序将Web应用程序日志路由到ELK。
先决条件
Mac用户:您将需要最新的Docker工具箱。
Linux用户:您将需要Docker引擎,机器和组成。
在这两个系统上,您都需要安装Exoscale的CS工具,您可以使用Python生态系统的pip来获取它:
pip install cs
我们将使用docker-machine在Exoscale上创建所需的实例,然后使用CS修改安全组以允许连接到我们新安装的ELK堆栈。
cs和docker-machine都依赖于Exoscale API,因此他们将需要访问您的API凭据。
使用以下命令导出您外壳程序中的凭据:
export EXOSCALE_ACCOUNT_EMAIL=<your exoscale account email>
export CLOUDSTACK_ENDPOINT=https://api.exoscale.ch/compute
export CLOUDSTACK_KEY="<your exoscale API Key>"
export CLOUDSTACK_SECRET_KEY="<your exoscale Secret Key>"
最后,您需要一些我在git repo中提供的文件。 在本地克隆它:
git clone https://github.com/MBuffenoir/elk.git
cd elk
首先,什么是ELK?
ELK是由Elastic.co维护的开源工具的集合,该工具结合了以下内容:
Elasticsearch:我们将用于存储日志的索引器和搜索引擎。
Logstash:收集并解析日志,然后将其存储在Elasticsearch索引中的工具。
Kibana:一种工具,可查询Elasticsearch REST API以获取我们的数据,并有助于创建有洞察力的可视化效果。
创建实例
让我们使用docker-machine在Exoscale上创建一个将托管ELK的Ubuntu实例:
docker-machine create --driver exoscale \
--exoscale-api-key $CLOUDSTACK_KEY \
--exoscale-api-secret-key $CLOUDSTACK_SECRET_KEY \
--exoscale-instance-profile small \
--exoscale-disk-size 10 \
--exoscale-security-group elk \
elk
这将花费一些时间来运行,并且将为您提供类似于以下结果:
Running pre-create checks...
Creating machine...
(elk) Querying exoscale for the requested parameters...
(elk) Security group elk does not exist, create it
[...]
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
对于本演示,我主要使用默认参数,但是当然,您可以根据需要自定义此参数。 查看驱动程序文档以了解更多信息。 您还可以稍后扩展实例(通过Web界面手动或使用CS和Exoscale API手动扩展)。
此时,您应该能够使用以下命令连接到远程Docker守护程序:
eval $(docker-machine env elk)
让我们确保一切正常:
docker version
docker info
现在,让我们创建第二台计算机,在该计算机上运行演示应用程序:
docker-machine create --driver exoscale \
--exoscale-api-key $CLOUDSTACK_KEY \
--exoscale-api-secret-key $CLOUDSTACK_SECRET_KEY \
--exoscale-instance-profile tiny \
--exoscale-disk-size 10 \
--exoscale-security-group demo \
demo
docker-machine已经打开了所有必需的端口,供您连接到新的远程Docker守护程序。 您可以在新创建的麋鹿安全组中查看这些端口。
现在,您需要打开访问正在运行的应用程序并使它们相互通信所需的端口。
让我们使用cs来做到这一点。 我们首先打开端口以连接到Kibana:
cs authorizeSecurityGroupIngress protocol=TCP startPort=5600 endPort=5600 securityGroupName=elk cidrList=0.0.0.0/0
现在,让我们的应用程序将其日志发送到Logstash:
cs authorizeSecurityGroupIngress protocol=UDP startPort=5000 endPort=5000 securityGroupName=elk 'usersecuritygrouplist[0].account'=$EXOSCALE_ACCOUNT_EMAIL 'usersecuritygrouplist[0].group'=demo
最后,我们将打开演示Web服务器的端口80:
cs authorizeSecurityGroupIngress protocol=TCP startPort=80 endPort=80 securityGroupName=demo cidrList=0.0.0.0/0
启动ELK
现在我们的实例和安全组已准备就绪,可以启动ELK了。
首先,您将需要上传ELK所需的配置文件。 我们将这样做:
docker-machine scp -r conf-files/ elk:
请注意,此处使用的证书是自签名的。 如果愿意,可以用以下方法替换或重新生成它:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./kibana-cert.key -out ./kibana-cert.crt
现在,您可以连接到远程Docker守护程序,并使用以下命令启动ELK:
eval $(docker-machine env elk)
docker-compose -f docker-compose-ubuntu.yml up -d
享受出色完成的工作的美妙之处:
docker-compose -f docker-compose-ubuntu.yml ps
哪个应该给您类似于此的输出:
Name Command State Ports
elasticdata /docker-entrypoint.sh chow ... Exit 0
elasticsearch /docker-entrypoint.sh elas ... Up 9200/tcp, 9300/tcp
kibana /docker-entrypoint.sh kibana Up 5601/tcp
logstash /docker-entrypoint.sh -f / ... Up 0.0.0.0:5000->5000/udp
proxyelk nginx -g daemon off; Up 443/tcp, 0.0.0.0:5600->5600/tcp, 80/tcp
你可以在此处看到构成ELK堆栈的三个应用程序和用于保护它们的反向NGINX代理。
运行演示Web服务器并将其日志发送到ELK
让我们再次使用Docker运行一个简单的NGINX Web服务器,该服务器将模拟典型的Web应用程序:
eval $(docker-machine env demo)
docker run -d --name nginx-with-syslog --log-driver=syslog --log-opt syslog-address=udp://$(docker-machine ip elk):5000 -p 80:80 nginx:alpine
使用以下命令确保您的Web服务器正常运行:
docker ps
使用您喜欢的Web浏览器或使用curl连接到它:
curl http://$(docker-machine ip demo)
使用Kibana查看日志
现在是您一直在等待的时刻!
浏览到您的ELK安装:https:// <elk实例ip>:5600
默认的用户名和密码为admin / Kibana05。
由于这是您第一次连接到它,因此将需要几秒钟来进行设置。
准备就绪后,点击绿色的创建按钮,然后点击发现标签来创建第一个索引。 现在,您应该能够看到您的NGINX演示Web服务器的日志:
结论
在这里,我们已经看到了使用ELK和Docker收集日志的最低要求。
下一步可能是增强Logstash配置,以检测日志中的特殊字段,还可能删减一些敏感信息,并且当然要在Kibana中创建漂亮的可视化文件。 我们可以再来看一次。
完美收集日志!
喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以+ qq群:907135806 交流学习,共同学习进步。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货加vx:ddmsiqi 领取啦