部署ELK+filebeat收集nginx日志

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 部署ELK+filebeat收集nginx日志

前言

简介

ELK(Elasticsearch、Logstash、Kibana)是开源的实时日志收集分析解决方案。

  • Elasticsearch:开源搜索引擎,是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。在ELK中负责日志分析与存储。
  • Logstash:日志收集、过滤、转发的日志收集引擎。能够从多个来源采集数据,转换数据,然后将数据发送到“存储库”中。Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。在本文中负责接收处理filebeat的数据
  • Kibana:负责页面可视化展示。
  • Filebeat:日志数据采集

完整日志系统的基本特征:

  • 收集:能够采集多种来源的日志数据
  • 传输:能够稳定的把日志数据解析过滤并传输到存储系统
  • 存储:存储日志数据
  • 分析:支持UI分析
  • 警告:能够提供错误报告,监控机制

部署位置

IP 应用 版本 说明
192.168.2.249 elasticsearch 7.5.1 日志分析和存储,简称“es”
192.168.2.249 logstash 7.5.1 日志处理
192.168.2.249 kibana 7.5.1 数据可视化
192.168.2.249 filebeat 7.5.1 日志采集
192.168.2.249 nginx 1.21.5 日志源

步骤

准备工作

  1. 安装docker和docker-compose,可参考 博客园 - 花酒锄作田 - linux离线安装docker与compose
  2. docker拉取es、logstash和kibana的docker镜像(version 7.5.1)
  3. 下载filebeat的二进制程序压缩包(官方下载地址
  4. 安装nginx

记录的一些命令(使用普通用户admin,有docker的使用权限)

# 拉取镜像
docker pull elasticsearch:7.5.1
docker pull logstash:7.5.1
docker pull kibana:7.5.1
# 准备数据和配置文件目录
mkdir -p $HOME/apps/{elasticsearch,logstash,kibana}

安装elasticsearch

  1. 编辑es-compose.yaml
version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.5.1
    container_name: es
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    hostname: elasticsearch
    ports:
      - "9200:9200"
      - "9300:9300"
  1. 创建docker容器
docker-compose -f es-compose.yaml
  1. 从容器中复制一些配置
docker cp es:/usr/share/elasticsearch/data $HOME/apps/elasticsearch
docker cp es:/usr/share/elasticsearch/config $HOME/apps/elasticsearch
docker cp es:/usr/share/elasticsearch/modules $HOME/apps/elasticsearch
docker cp es:/usr/share/elasticsearch/plugins $HOME/apps/elasticsearch
  1. 修改es-compose.yaml(主要用于挂载数据持久化目录)
version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.5.1
    container_name: es
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /home/admin/apps/elasticsearch/modules:/usr/share/elasticsearch/modules
      - /home/admin/apps/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /home/admin/apps/elasticsearch/data:/usr/share/elasticsearch/data
      - /home/admin/apps/elasticsearch/config:/usr/share/elasticsearch/config
    hostname: elasticsearch
    ports:
      - "9200:9200"
      - "9300:9300"
  1. 重新启动
docker-compose -f es-compose.yaml up -d

安装logstash

  1. 编辑logstash-compose.yaml
version: '3'
services:
  logstash:
    image: logstash:7.5.1
    container_name: logstash
    hostname: logstash
    ports:
      - "5044:5044"
  1. 启动docker容器
docker-compose -f logstash-compose.yaml up -d
  1. 从docker容器中复制配置
docker cp logstash:/usr/share/logstash/config $HOME/apps/logstash
docker cp logstash:/usr/share/logstash/pipeline $HOME/apps/logstash
  1. 修改 $HOME/apps/logstash.config/logstash.yml,示例如下
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.2.249:9200" ]
  1. 修改$HOME/apps/logstash/pipeline/logstash.conf
input {
  beats {
    port => 5044
    codec => "json"
  }
}
output {
  elasticsearch {
    hosts => ["http://192.168.2.249:9200"]
    index => "logstash-nginx-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}
  1. 修改logstash-compose.yaml
version: '3'
services:
  logstash:
    image: logstash:7.5.1
    container_name: logstash
    hostname: logstash
    ports:
      - "5044:5044"
    volumes:
      - /etc/localtime:/etc/locatime:ro
      - /etc/timezone:/etc/timezone:ro
      - /home/admin/apps/logstash/pipeline:/usr/share/logstash/pipeline
      - /home/admin/apps/logstash/config:/usr/share/logstash/config
  1. 重新启动
docker-compose -f logstash-compose.yaml up -d

安装kibana

  1. 编辑kibana-compose.yaml
version: '3'
services:
  kibana:
    image: kibana:7.5.1
    container_name: kibana
    hostname: kibana
    ports:
      - "5601:5601"
  1. 启动
docker-compose -f kibana-compose.yaml up -d
  1. 从docker容器中复制配置
docker cp kibana:/usr/share/kibana/config $HOME/apps/kibana
  1. 修改 $HOME/apps/kibana/config/kibana.yml,修改es地址和指定中文
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.2.249:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
  1. 修改kibana-compose.yaml
version: '3'
services:
  kibana:
    image: kibana:7.5.1
    container_name: kibana
    hostname: kibana
    ports:
      - "5601:5601"
    volumes:
      - /etc/localtime:/etc/locatime:ro
      - /etc/timezone:/etc/timezone:ro
      - /home/admin/apps/kibana/config:/usr/share/kibana/config
  1. 重新启动
docker-compose -f kibana-compose.yaml up -d

修改nginx日志格式

log_format json '{"@timestamp": "$time_iso8601", '
        '"connection": "$connection", '
                '"remote_addr": "$remote_addr", '
                '"remote_user": "$remote_user", '
                '"request_method": "$request_method", '
                '"request_uri": "$request_uri", '
                '"server_protocol": "$server_protocol", '
                '"status": "$status", '
                '"body_bytes_sent": "$body_bytes_sent", '
                '"http_referer": "$http_referer", '
                '"http_user_agent": "$http_user_agent", '
                '"http_x_forwarded_for": "$http_x_forwarded_for", '
                '"request_time": "$request_time"}';

在http块中设置:access_log logs/access.log json;

安装filebeat

  1. 假设filebeat的压缩包已下载并解压,解压和重命名之后,二进制文件所在目录为/home/admin/apps/filebeat
  2. 编辑filebeat.yaml,找到以下内容,取消输出到es,改为输出到logstash,示例:
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.2.249:5044"]
  1. 启用nginx模块
./filebeat modules enable nginx
  1. 配置nginx模块。修改./modules.d/nginx.yml,主要修改nginx日志的路径,示例如下
# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.5/filebeat-module-nginx.html
- module: nginx
  # Access logs
  access:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/home/admin/apps/nginx/logs/*access.log"]
  # Error logs
  error:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/home/admin/apps/nginx/logs/*error.log"]
  1. 检查配置
./filebeat test config
./filebeat test output
  1. 验证通过后,启动
nohup ./filebeat -e -c ./filebeat.yml > /dev/null 2>&1 &

kibana展示

  1. 打开kibana的web页面,端口5061
  2. 打开左侧菜单栏的设置(management) - 索引模式 - 创建索引模式
  3. 输入logstash-nginx-*,点击下一步(如果点不了,选择timestamp)
  4. 打开左侧菜单栏的discover,选择logstash-nginx-*就可以试试查看nginx输出日志了

参考资料

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
弹性计算 运维 监控
快速部署 Nginx 社区版
Nginx是一个高性能的HTTP和反向代理服务器。Nginx在计算巢上提供了社区版服务,您无需自行配置云主机,即可在计算巢上快速部署Nginx服务、实现运维监控,从而方便地基于Nginx搭建您自己的应用。本文介绍使用如何通过计算巢快速部署Nginx社区版。
快速部署 Nginx 社区版
|
3月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
14天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
1月前
|
存储 监控 安全
|
2月前
|
前端开发 JavaScript 应用服务中间件
使用nginx部署网站
使用nginx部署网站
|
2月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
137 1
|
2月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
672 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
213 1
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。