当前位置: 首页 > 后端技术 > PHP

使用Docker快速部署ELK分析Nginx日志实践

时间:2023-03-29 19:23:43 PHP

一、背景笔者所在项目组的项目由多个子项目组成,每个子项目都有一定的日志。有时候,如果要排查一些问题,需要跑到各个地方去查看,极其不便。之前听说有ELK这样的神器。搜索了一下,发现用docker搭建也不麻烦。有需要的读者参考。笔者在这次实践中参考了很多文档和笔记。参考链接有:DockerElK安装部署教程、DockerHub官网、DockerELK文档2.操作总结服务安装运行数据导入及验证图配置及展示3.服务安装运行ELK的安装方式有很多种,例如源代码、rpm包或docker;但是docker分为单体安装和ELK打包安装。笔者这里使用的是docker打包安装,因为这种方式比较简单,因为只需要下载镜像,然后运行即可。3.1镜像下载ELK镜像已经被docker官方收录,只需要简单的命令拉取镜像即可;但是考虑到ELK镜像比较大,在拉取过程中出现比较慢的情况,所以笔者使用了阿里云的加速器来提速;笔者使用mac版docker,参考配置方法如下:3.1.1镜像加速桌面顶栏docker图标右击,选择Preferences,添加https://k0pf39f8.mirror.aliyuncs.com添加到Daemon选项卡下Registrymirrors列表中的registry-mirrors数组,点击Apply&Restart按钮,等待Docker重启并应用配置的镜像加速器,下图为3.1.2Imageacquisition设置加速后地址,作者就可以开始拉取ELK镜像了。参考命令如下:dockerpullsebp/elk笔者上一张镜像对应的版本是6.2.4。如果读者以后阅读本文,在构建过程中遇到一些问题,可以在命令后面加上:6.2.4,指定版本,减少意外;下载镜像后,可以使用docker命令验证是否成功。参考命令如下:dockerimages笔者执行docker后返回如下结果REPOSITORYTAGIMAGEIDCREATEDSIZEsebp/elklatestc916150705cc2周前1.49GB从结果可以看出ELK镜像已经下载完毕,占用近1.5GB的空间。3.2容器运行运行这个容器时,需要hostport转发到容器,其中ES端口为9200,kibana端口为5601,logbate端口为5044;另外,作者建议将配置文件和数据存放在宿主机上,以便后期维护,所以也需要将宿主机目录挂载到container/data下;最终命令如下:dockerrun-p5601:5601-p9200:9200-p5044:5044-v/Users/song/dockerFile:/data-it-d--nameelksebp/elk作者在在运行容器的参数中加入后台运行-d参数,让笔者不怕意外突然停止容器,而是放在后台运行,看不到ELK服务器启动过程。启动时间取决于您机器的性能。我的电脑大约需要10秒来决定。如果觉得启动失败,也可以删除容器,然后新建容器。删除上面命令中的-d,可以看到启动过程。3.3数据导入和验证容器运行之后笔者需要验证是否启动成功,可以通过浏览器访问kibana和ES的页面来判断。3.3.1检查Kibana是否通过浏览器访问kibana。如果界面正常出现,则表示启动成功。URL地址如下:http://localhost:5601/当浏览器访问成功后,参考下图:3.3.2ES服务检查验证kibana启动成功后,继续验证ES服务是否正常已成功启动。URL地址如下:http://localhost:9200/_search?pretty访问后,此时ES中应该没有数据,出现的界面如下4、配置与验证确保es后并且kibana服务已经启动,笔者还需要进行一些数据导入的步骤。4.1logstash配置logstash配置主要有三个地方需要处理,首先是输入源所在的地方,然后是数据过滤或者格式化的地方,最后是需要输出数据的地方;笔者在下面的配置中只做了两个,因为在nginx日志中已经格式化了日志,编辑配置文件的命令如下:vim/Users/song/dockerFile/config/logstash的内容.conf配置文件参考如下input{file{path=>"/data/logs/access.log"codec=>"json"}}output{elasticsearch{hosts=>["127.0.0.1:9200"]}stdout{codec=>ruby??debug}}在配置文件中可以看到日志文件存放在“/data/logs/access.log”,输出地址为127.0.0.1:9200,也就是ESservice4.2nginx日志格式由于笔者对logstash配置文件的语法不熟悉,在里面写过滤器和过滤项比较费时间,所以选择直接在nginx中更改日志格式,设置nginx日志文件转json格式,在更改nginx配置文件前,需要获取nginx配置文件路径,参考如下命令sudonginx-t返回结果Password:nginx:配置文件/usr/local/etc/nginx/nginx.conf语法是oknginx:配置文件/usr/local/etc/nginx/nginx.conf测试成功在返回的结果中已经可以看到配置文件的位置,使用vim编辑配置文件,参考命令vim/usr/local/etc/nginx/nginx.conf添加自定义日志格式http级别,以及日志路径,参考配置如下:log_formatjson'{"@timestamp":"$time_iso8601","@version":"1","host":"$server_addr","client":"$remote_addr","size":"$body_bytes_sent","re??sponsetime":"$request_time","domain":"$host","url":"$uri","status":"$地位”}';access_log/data/logs/access.logjson;笔者配置截图如下4.3启动logstash之前已经配置好日志格式和logstash,现在需要启动logstash开始收集日志。在启动logstash之前,我需要先进入容器。进入容器参考命令如下:dockerexec-itelkbash进入容器后,我需要启动logstash收集数据。启动的时候需要带入两个参数。第一个是logstash的临时数据存放位置,第二个是使用的配置文件。因此,构造命令如下:/opt/logstash/bin/logstash--path.data/tmp/logstash/data-f/data/config/logstash.conf4.4添加数据现在只要nginx产生日志,logstash会实时的将日志发送到ES服务。发送数据时,终端窗口也会发生变化,如下图所示。检查ES中是否有数据,确认有数据后,即可进行绘图配置,配置完成后,即可进行过滤日志等操作5.1ES数据查看当数据添加到ES服务器后,作者可以通过ES服务提供的URL查看数据。URL地址如下:http://localhost:9200/_search?pretty会看到笔者刚才输入的日志内容,如下图,当总数变大后,看到的是nginx日志信息出现以下数据项,则表示笔者导入数据成功。5.2Kibana索引配置通过浏览器访问kibana,URL地址如下http://127.0.0.1:5601/app/kibana#/management/kibana/index?_g=()点击左侧导航栏的Discover链接进入创建索引模式界面,如下图点击页面右下方的下一步按钮,会跳转到下一页。在这个页面,需要选择一个时间维度,如下图,点击Next创建一个kibana索引完成后,再次点击左侧导航栏的Discover链接,可以看到刚刚创建的索引的一些视图现在如下图,图中有一个input输入框,作者可以填写过滤需要的关键词;如果没有过滤掉结果,也可以检查一下左边的时间过滤项是否设置正确。比如笔者的时间过滤项设置为Today,表示过滤当天的数据。ELK的整体操作流程比较简单。首先logstash对各种日志进行收集和过滤,然后将过滤后的内容发送给ES服务。最后用户通过Kibana页面查看ES中的日志数据;作者:唐青松微信:songboy8888日期:2018-08-25