热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Beats:使用ElasticStack对NginxWeb服务器监控

Nginx是一种非常流行的开源Web服务器,为全球数百万个应用程序提供服务。Nginx仅次于Apache,这得益于它作为Web服务器的流行(

Nginx 是一种非常流行的开源 Web 服务器,为全球数百万个应用程序提供服务。 Nginx 仅次于 Apache,这得益于它作为 Web 服务器的流行(它还可以充当反向代理,HTTP 缓存和负载平衡器),以其有效地提供静态内容和整体性能的方式。

从操作和安全性的角度来看,Nginx 处于应用程序体系结构的关键时刻,需要始终进行密切监视。 Elastic Stack(Elasticsearch,Logstash,Kibana 和 Beats)是世界上最受欢迎的开源日志管理和日志分析平台,它为工程师提供了一种非常简单有效的方法来监视 Nginx。

在本文中,我们将提供为 Nginx 日志设置管道并开始监视工作的步骤。


Nginx 日志记录基础

Nginx 为用户提供了各种日志记录选项,包括日志记录到文件,条件日志记录和 syslog 日志记录。 Nginx 将生成两种可用于操作监视和故障排除的日志类型:错误日志和访问日志。 默认情况下,这两个日志通常都位于 /var/log/nginx 下,但是此位置可能因系统而异。

liuxg@liuxg:/var/log/nginx$ ls
access.log error.log

Nginx error logs

错误日志包含可用于对操作问题进行故障诊断的诊断信息。 Nginx error_log 指令可用于指定日志文件的路径和严重性,并可在主要 http,邮件,流,服务器,位置上下文(按此顺序)中使用。比如,我们可以使用如下的指令来指定错误日志的路径及需要记录日志的严重性的级别:

error_log /path/to/log debug;

上述配置在 Nginx 的配置文件中进行设置。针对我的 Ubuntu Linux 的情况而言,你可以找到配置文件:

$ pwd
/etc/nginx
liuxg@liuxgu:/etc/nginx$ ls
conf.d koi-win nginx.conf sites-available win-utf
fastcgi_params mime.types nginx.conf.org sites-enabled
koi-utf modules scgi_params uwsgi_params

在上面的 nginx.conf 配置文件中,我们可以进行配置这个错误日志的路径及严重性:

user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}...

日志示例:

2020/02/26 17:20:33 [error] 7722#7722: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.43.192, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3001/", host: "192.168.43.192"
 

Nginx access logs

访问日志包含有关发送到 Nginx 并由 Nginx 服务的所有请求的信息。 因此,它们是用于性能监控以及安全性的宝贵资源。 Nginx 访问日志的默认格式是组合格式,但是在分发之间可能会有所不同。 与错误日志一样,你可以使用 access_log 指令来设置日志文件路径和日志格式。

日志示例:

::1 - - [26/Feb/2020:16:46:52 +0800] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"


配置

将 Nginx 日志传送到 Elastic Stack 的最简单方法是使用 Filebeat。

在 Elastic Stack 的早期版本中,Logstash 在 Nginx 日志管道中发挥了关键作用-处理日志并进行地理增强。 随着 Filebeat 模块的出现,无需 Logstash 即可完成此操作,从而使Nginx 日志记录管道的设置更加简单。

在今天的实验中,我们将使用如下的配置:

在上面的配置中,在我的 MacOS 上运行一个本地的 Elasticsearch 及 Kibana,而在另外一个虚拟机中安装一个 Ubuntu 18.04 的 Linux 系统。在 Ubuntu 18.04 中,我们运行如下的软件:

  • Nginx:开源高性能的 HTTP 和反向代理 web 服务器
  • Nodejs:运行一个本地的 web 服务器
  • Filebeat:用于把 Nginx 的日志导入到 Elasticsearch 中

安装

为了能够完成我们的设置,我们做如下的安装:

安装 Elasticseach

如果大家还没安装好自己的 Elastic Stack 的话,那么请按照我之前的教程 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 安装好自己的 Elasticsearch。由于我们的 Elastic Stack 需要被另外一个 Ubuntu VM 来访问,我们需要对我们的 Elasticsearch 进行配置。首先使用一个编辑器打开在 config 目录下的 elasticsearch.yml 配置文件。我们需要修改 network.host 的 IP 地址。在你的 Mac 及 Linux 机器上,我们可以使用:

$ ifconfig

来查看到我们的机器的 IP 地址。针对我的情况,我的 MacOS 机器的 IP 地址是:192.168.43.220。

在上面我们把 network.host 设置为 "_site_",表明它绑定到我们的本地电脑的IP地址。详细说明请参阅 Elasticsearch 的 network.host 说明。

我们也必须在 elasticsearch.yml 的最后加上 discovery.type: single-node,表明我们是单个 node。

等修改完我们的 IP 地址后,我们保存 elasticsearch.yml 文件。然后重新运行我们的 elasticsearch。我们可以在一个浏览器中输入刚才输入的 IP 地址并加上端口号 9200。这样可以查看一下我们的 elasticsearch 是否已经正常运行了。

安装 Kibana

我们可以按照 “如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana” 中介绍的那样来安装我们的 Kibana。由于我们的 Elasticsearch 的 IP 地址已经改变,所以我们必须修改我们的 Kibana 的配置文件。我们使用自己喜欢的编辑器打开在 config 目录下的 kibana.yml 文件,并找到 server.host。把它的值修改为自己的电脑的 IP 地址。针对我的情况是:

同时找到 elasticsearch.hosts,并把自己的 IP 地址输入进去:

保存我们的 kibana.yml 文件,并运行我们的 Kibana。同时在浏览器的地址中输入自己的 IP 地址及 5601 端口:

如果配置成功的话,我们就可以看到上面的画面。


安装 Nodejs

我们在 Ubuntu OS 上安装如下的指令来安装我们的 nodes:

sudo apt update
sudo apt install nodejs

如果仓库中的软件包适合你的需求,那么这就是设置 Node.js 所需要做的全部工作。 在大多数情况下,你还需要安装 Node.js 程序包管理器 npm。 你可以通过键入以下内容来执行此操作:

sudo apt install npm

这将允许你安装要与 Node.js 一起使用的模块和软件包。

我们可以通过如下的命令来检查我们的 nodejs 的版本:

nodejs -v

接下来,我们安装并运行一个我们自己的 nodejs 的 web 服务器。我们先下载我的一个简单的 nodejs 代码:

git clone https://github.com/liu-xiao-guo/samplenodejs

等我们把代码下载下来后,我们可以在这个项目的根目录中运行如下的命令:

npm install

我们的 nodejs 是一个简单的基于 express 框架的 web 服务器。上面的命令可以帮我们安装我们所需要的所有的 nodejs 的模块。接下来,我们使用如下的命令来启动我们的 web 服务器。它运行于端口3000上:

npm start

这事我们可以在我们的 Ubuntu OS 系统的浏览器中,可以打入如下的地址:localhost:3000/hello

在还没有启动你的firewall的情况下,你也可以在你的host机器上打开这个网页:

如果你能看到上面的两个输出,表明你的 nodejs 的应用已经被成功运行。

安装 Nginx

Nginx 在 Ubuntu 的默认存储库中可用,因此安装非常简单。

由于这是我们在此会话中与 apt 打包系统的第一次交互,因此我们将更新本地包索引,以便我们可以访问最新的包清单。 之后,我们可以安装 nginx:

sudo apt-get update
sudo apt-get install nginx

一旦 nginx 被成功安装,我们可以通过如下的命令来查看 nginx 服务是否已经被成功启动:

systemctl status nginx

$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy serverLoaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)Active: active (running) since Wed 2020-02-26 17:21:21 CST; 17h agoDocs: man:nginx(8)Process: 7740 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginxProcess: 7743 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SProcess: 7742 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, sMain PID: 7744 (nginx)Tasks: 7 (limit: 4915)CGroup: /system.slice/nginx.service├─7744 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;├─7745 nginx: worker process├─7746 nginx: worker process├─7747 nginx: worker process├─7748 nginx: worker process├─7749 nginx: worker process└─7750 nginx: worker process2月 26 17:21:21 liuxg systemd[1]: Starting A high performance web server and a reverse proxy server
2月 26 17:21:21 liuxg systemd[1]: Started A high performance web server and a reverse proxy server

如果我们想停止 nginx,我们可以使用如下的命令:

sudo systemctl stop nginx

要在停止时启动 Web 服务器,请键入:

sudo systemctl start nginx

要停止然后再次启动该服务,请键入:

sudo systemctl restart nginx

调整 firewall

在测试 Nginx 之前,我们需要重新配置防火墙软件以允许访问该服务。 Nginx 在安装后将自己注册为 ufw(我们的防火墙)的服务。 这使得允许 Nginx 访问相当容易。

我们可以通过键入以下内容列出 ufw 知道如何使用的应用程序配置:

sudo ufw app list

你应该获得应用程序配置文件的列表:

Available applications:CUPSNginx FullNginx HTTPNginx HTTPSOpenSSH

如你所见,Nginx 提供了三个配置文件:

  • Nginx Full:此配置文件同时打开端口80(正常,未加密的网络流量)和端口443(TLS / SSL加密的流量)
  • Nginx HTTP:此配置文件仅打开端口80(正常,未加密的网络流量)
  • Nginx HTTPS:此配置文件仅打开端口443(TLS / SSL加密流量)

建议你启用限制性最强的配置文件,该配置文件仍将允许你配置的流量。 由于我们尚未为服务器配置 SSL,因此在本指南中,我们只需要允许端口80上的流量通过。

你可以通过键入以下内容启用此功能:

sudo ufw allow 'Nginx HTTP'

你可以通过键入以下内容来验证更改:

sudo ufw status

$ sudo ufw status
Status: inactive

如果上面的命令返回 inactive,则表明我们的防火墙没有被打开。在这种情况下在我们的 host MacOS 机器上的浏览器打开地址 http://192.168.43.192:3000/ 可以看到输出。如果我们想让我们的 firewall 能正常工作,我们可以打入如下的命令:

sudo ufw enable

$ sudo ufw enable
Firewall is active and enabled on system startup

由于防火墙已经起作用了。这个时候我们在 MacOS 的浏览器中再次打开地址 http://192.168.43.192:3000/ 将不会看到任何的内容。这是因为我们的 nginx 只打开了80这个口。

如果我们想取消防火墙,我们可以打入如下的命令来取消防火墙:

sudo ufw disable

$ sudo ufw disable
Firewall stopped and disabled on system startup

将 Nginx 设置为反向代理服务器

在上面,我们已经看到,当我们把 firewall 打开后,我们的那个 http://192.168.43.192:3000/ 地址不能在外面被访问。

现在你的应用程序正在运行,并且正在 localhost 上侦听,你需要为用户提供一种访问它的方式。 为此,我们将 Nginx Web 服务器设置为反向代理。我们在 /etc/nginx /sites-available /default 文件中设置 Nginx 配置。 打开文件进行编辑:

sudo vi /etc/nginx/sites-available/default

在server块内,你应该有一个现有的 location/block。 用以下配置替换该块的内容。 如果你的应用程序设置为在其他端口上侦听,则将突出显示的部分更新为正确的端口号。

/etc/nginx/sites-available/default

. . .location / {proxy_pass http://localhost:3000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}
...

在上面,我们把端口地址3000放入设置中。你可以根据自己的服务器的端口进行配置。 假设我们的服务器在 example.com 上可用,则通过 Web 浏览器访问 https://example.com/会将请求发送到本地主机的3000端口。

当我们修改完上面的配置后,输入以下内容,确保没有引入任何语法错误:

sudo nginx -t

接下来,重新启动 Nginx:

sudo systemctl restart nginx

在我们配置后,我们可以重新在我们的 host MacOS 上输入地址:

这次我们可以看见即使在 firewall 运行的情况下,外面的请求也可以访问到运行于 localhost:3000 口的 web 服务器。


安装 Filebeat

在 Ubuntu 上安装 Filebeat 也是非常直接的。我们可以先打开我们的 Kibana。

我们点击 “Add log data” 按钮:

在上面我们点击 “Nginx logs”:

由于 Ubuntu 系统是 Debian 系统,所有我们选择 DEB。我们按照上面的指令来完成我们的安装。

简单地说:

下载 Filebeat 并安装

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-amd64.deb
sudo dpkg -i filebeat-7.5.0-amd64.deb

配值 Filebeat

修改 /etc/filebeat/filebeat.yml 以设置连接信息:

output.elasticsearch:hosts: [""]username: "elastic"password: ""
setup.kibana:host: ""

其中 是 Elastic 用户的密码, 是 Elasticsearch 的 URL, 是 Kibana 的 URL。针对我的情况:

启动并配置 nginx 模块

sudo filebeat modules enable nginx

根据自己的需求,我们可以适当修改 /etc/filebeat/modules.d/nginx.yml 文件里的配置。针对我们的练习,我们可以不做任何的修改。

启动 Filebeat

setup 命令将加载 Kibana 仪表板。 如果已经设置了仪表板,请忽略此命令。

sudo filebeat setup

上面的命令的输出为:

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Loaded machine learning job configurations
Loaded Ingest pipelines

我们启动 Filebeat:

sudo service filebeat start

检查 Nginx 数据

至此我们的安装都已经完成。


分析 Nginx 数据

我们打开 Kibana:

我们点击 “[Filebeat Nginx] Overview ECS”:

至此,我们完成了对 Nginx 日志的监控。在上面我们可以看到 Nginx 的所有的信息。

参考:

【1】https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

【2】https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04

【3】https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04

【4】https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04



推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
author-avatar
杨仕卫123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有