前言

简介

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输出日志了

参考资料

部署ELK+filebeat收集nginx日志的更多相关文章

  1. ELK Stack (2) —— ELK + Redis收集Nginx日志

    ELK Stack (2) -- ELK + Redis收集Nginx日志 摘要 使用Elasticsearch.Logstash.Kibana与Redis(作为缓冲区)对Nginx日志进行收集 版本 ...

  2. Kubernetes实战之部署ELK Stack收集平台日志

    主要内容 1 ELK概念 2 K8S需要收集哪些日志 3 ELK Stack日志方案 4 容器中的日志怎么收集 5 K8S平台中应用日志收集 准备环境 一套正常运行的k8s集群,kubeadm安装部署 ...

  3. ELK日志系统之使用Rsyslog快速方便的收集Nginx日志

    常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash.filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实 ...

  4. ELK整合Filebeat监控nginx日志

    ELK 日志分析 1. 为什么用到 ELK 一般我们需要进行日志分析场景:直接在日志文件中 grep. awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如 ...

  5. ELK 二进制安装并收集nginx日志

    对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...

  6. ELK学习实验018:filebeat收集docker日志

    Filebeat收集Docker日志 1 安装docker [root@node4 ~]# yum install -y yum-utils device-mapper-persistent-data ...

  7. ELK学习实验016:filebeat收集tomcat日志

    filebeat收集tomcat日志 1 安装tomcat [root@node4 ~]# yum -y install tomcat tomcat-webapps tomcat-admin-weba ...

  8. ELK filter过滤器来收集Nginx日志

    前面已经有ELK-Redis的安装,此处只讲在不改变日志格式的情况下收集Nginx日志. 1.Nginx端的日志格式设置如下: log_format access '$remote_addr - $r ...

  9. Docker 部署 elk + filebeat

    Docker 部署 elk + filebeat kibana 开源的分析与可视化平台logstash 日志收集工具 logstash-forwarder(原名lubmberjack)elastics ...

  10. ELK+FileBeat+Log4Net搭建日志系统

    ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...

随机推荐

  1. 简单工厂模式(Static Factory Method)

    创建性设计模式--简单工厂模式(Static Factory method) 模式动机 只需要知道参数的名字则可得到相应的对象 软件开发时,有时需要创建一些来自于相同父类的类的实例.可以专门定义一个类 ...

  2. drf重写authenticate方法实现多条件登录(源码分析)

    drf重写authenticate方法实现多条件登录(源码分析) 1. 思路 JWT拓展的登录视图中, 在接受到用户名和密码时, 调用的也是Django的认证系统中提供的authenticate()来 ...

  3. Web进阶LNMP网站部署

    Web进阶LNMP网站部署 目录 Web进阶LNMP网站部署 LNMP架构工作流程 部署LNMP架构 1.安装nginx 2.安装php 3.安装数据库 将Nginx和PHP建立连接 1.修改ngin ...

  4. 2022-08-19:以下go语言代码输出什么?A:equal;B:not equal;C:不确定。 package main import ( “fmt“ “reflect“ )

    2022-08-19:以下go语言代码输出什么?A:equal:B:not equal:C:不确定. package main import ( "fmt" "refle ...

  5. vue全家桶进阶之路5:DOM文档对象模型

    一.DOM对象 DOM,全称"DocumentObjectModel(文档对象模型)",它是由W3C组织定义的一个标准. 在前端开发时,我们往往需要在页面某个地方添加一个元素或者删 ...

  6. django @login_required

    Django在做后台系统过程中,我们通常都会为view函数添加 @login_required 装饰器,这个装饰器的主要作用就是在用户访问这个方法时,检查用户是否已经成功登陆,如果没有则重定向到登陆页 ...

  7. PHP反序列化常用魔术方法

    PHP反序列化 php序列化(serialize):是将变量转换为可保存或传输的字符串的过程 php反序列化(unserialize):就是在适当的时候把这个字符串再转化成原来的变量使用 PHP反序列 ...

  8. Manjaro linux 安装svn 并在文件管理器里显示相关图标

    需要先安装svn linux版打开终端执行 sudo pacman -S svn 安装完成后执行一下 svn --version 出现这个就说明svn已经安装完成了,这个时候我们可以执行 svn ch ...

  9. Spring 核心概念之一 IoC

    前言 欢迎来到本篇文章!通过上一篇什么是 Spring?为什么学它?的学习,我们知道了 Spring 的基本概念,知道什么是 Spring,以及为什么学习 Spring.今天,这篇就来说说 Sprin ...

  10. 基于飞桨paddlespeech训练中文唤醒词模型

    飞桨Paddlespeech中的语音唤醒是基于hey_snips数据集做的.Hey_snips数据集是英文唤醒词,对于中国人来说,最好是中文唤醒词.经过一番尝试,我发现它也能训练中文唤醒词,于是我决定 ...