6

使用Filebeat和Elasticsearch分析Nginx日志

 3 years ago
source link: https://easeapi.com/blog/blog/145-elasticsearch-nginx.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

145-elasticsearch-nginx.jpg

作为入门介绍文章,首先说明下几个软件之间的关系: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服务是否启动

root@easeapi:~# curl -X GET localhost:9200
{
  "name" : "easeapi",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "easeapi-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站点(https://easeapi.com)的二级目录作为访问路径为例

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

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

为kibana配置密码

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

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

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

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

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

How to Install ELK on Ubuntu 20.04

使用CDN提升网站访问速度
优化Nginx配置提升网站性能
Let’s Encrypt acme.sh 泛域名证书
utf8mb4:MYSQL中使用Emoji


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK