使用 Filebeat 和 Elasticsearch 分析 Nginx 日志

 原创    2021-04-05

本文实战记录使用Filebeat、Kibana、Elasticsearch等软件搭建搜集分析Nginx日志的系统。Filebeat主要负责将Nginx日志数据作为数据源输送至Elasticsearch。

作为入门介绍文章,首先说明下几个软件之间的关系:Elasticsearch是基于RESTful风格的分布式全文检索和数据分析引擎;Kibana是对Elasticsearch数据进行可视化展示的Web系统;而Filebeat负责将Nginx日志数据作为数据源输送至Elasticsearch。

本文服务器环境:Ubuntu 20.04,仅配置一个服务器节点。

环境准备:JAVA

需要安装Java Runtime Environment (JRE)和Java Development Kit (JDK)。

sudo apt update
apt install default-jre
java -version

sudo apt install default-jdk
javac -version

参考:How To Install Java with Apt on Ubuntu 20.04

Elasticsearch

安装Elasticsearch

#将Elasticsearch公共GPG密钥导入APT:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

#添加Elastic源(看川试验时elasticsearch最新是7.xx版本):
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee –a /etc/apt/sources.list.d/elastic-7.x.list

#安装elasticsearch
sudo apt update
sudo apt install elasticsearch

配置Elasticsearch

Elasticsearch的配置文件位于:

sudo vim /etc/elasticsearch/elasticsearch.yml

#重要配置项:
#集群名称,相同网络下相同的集群名的节点为一个集群。
cluster.name

#存放数据的目录
path.data

#主机地址
network.host: localhost

#服务端口号
http.port: 9200

管理Elasticsearch:

#启动/停止/重启
sudo systemctl start/stop/restart elasticsearch.service
#注册开机自启动
sudo systemctl enable elasticsearch.service

验证Elasticsearch服务是否启动

# curl -X GET localhost:9200
{
  "name" : "kanchuan",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "kanchuan-wDpaWmxXHJ8yu7a",
  "version" : {
    "number" : "7.11.2",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "c4ca4238a0b923820dcc509a6f75849b",
    "build_date" : "2021-03-01T08:54:38.141101Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

修改Elasticsearch占用内存大小

在小内存服务器上可以适当调小。Elasticsearch 7.x的配置方式较之前有不同,需要在/etc/elasticsearch/jvm.options.d目录新建以.options为后缀的文件。修改内存用量的配置如下:

vim jvm.options.d/jvm.options
-Xms1g
-Xmx1g

参考:elasticsearch jvm-options

Kibana

上一步已添加源,直接安装即可。因为版本依赖的关系,先安装Elasticsearch再安装Kibana。

sudo apt install kibana

Elasticsearch的配置文件位于:

vim /etc/kibana/kibana.yml

重要配置项:

server.port: 5601
server.host: "localhost"
server.basePath: "/kibana"//保持和nginx的访问目录配置一致
server.rewriteBasePath: true
elasticsearch.hosts: ["http://localhost:9200"]

#配置为中文
i18n.locale: "zh-CN"

管理Kibana

#启动/停止/重新启动
sudo systemctl start/stop/restart kibana
#加入自启动
sudo systemctl enable kibana

Filebeat

Filebeat是轻量级的数据收集处理工具,具有占用资源少的优点。

sudo apt install filebeat
#配置文件
sudo vim /etc/filebeat/filebeat.yml

#主要配置项
setup.kibana:
	host: "localhost:5601"

output.elasticsearch:
	hosts: ["localhost:9200"]

管理Filebeat

#启动/停止/重新启动
sudo systemctl start/stop/restart filebeat
#加入自启动
sudo systemctl enable filebeat
#测试连通性
filebeat test output

Filebeat通过Module进行扩展以支持不同数据格式的文件。Module相关的操作命令:

#查看模块状态
sudo filebeat modules list
#启动指定Module
sudo filebeat modules enable nginx

以Nginx为例,在启动Nginx的Module后,可以看到/etc/filebeat/modules.d目录的文件nginx.yml..disabled变成了nginx.yml。

vim /etc/filebeat/modules.d/nginx.yml

#配置nginx的日志路径。
- module: nginx
	access:
		enabled: true
		var.paths: ["/var/log/nginx/access.log"]
		
	error:
		enabled: true
		ar.paths: ["/var/log/nginx/error.log"]

配置完成后,使用filebeat setup写入配置,然后启动filebeat即可。

去除冗余字段

Filebeat默认输出的字段有些情况下可能无用,造成内容冗余。可以将冗余字段去除:

sudo vim /etc/filebeat/filebeat.yml

processors:
        #- add_host_metadata:
        #    when.not.contains.tags: forwarded
        #- add_cloud_metadata: ~
        #- add_docker_metadata: ~
        #- add_kubernetes_metadata: ~
  - drop_fields:
          fields: ["agent", "nginx", "log.offset", "fileset", "input"]

根据需要补充需要去除的字段。

最佳实践

启动服务

依次启动三个组件:

sudo service elasticsearch start
sudo service kibana start
sudo service filebeat start

Nginx站点配置kibana访问

以Nginx站点的二级目录作为访问路径为例:

server {
	...
	location /kibana/ {
    		proxy_pass http://127.0.0.1:5601;
    		rewrite ^/kibabna/(.*)$ /$1 break;
	}
}

通过https://kanchuan.com/kibana 即可访问到kibana。

为kibana配置密码

apt install apache2-utils
htpasswd -c /home/htpasswd <username>

将生成一个基于HTTP Basic Authentication认证的密码文件。在Nginx站点中增加配置:

server {
	auth_basic 'kanchuan center';
	auth_basic_user_file /home/htpasswd;
}

当访问对应页面时,会提示输入密码验证。

添加索引

打开kibana页面后,点击「添加数据」,选择「Nginx日志」(会有Filebeat模块解析Nginx日志的操作指南),按指引操作完成。

参考:

How to Install ELK on Ubuntu 20.04

文章最后修改于 2023-08-01

相关文章:

Nginx 目录服务和反向代理的 web 鉴权认证
Nginx 使用 http_image_filter_module 实现图片缩放旋转
启用 Web 应用防火墙(WAF)
近期服务器的一些改进
优化 Nginx 配置提升网站性能

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。