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

ELK技术1收集nginx正确和错误日志

文章目录一.ELK介绍1.ELK的提出2.ELK简介二.日志收集分类三.安装部署ELK1.安装配置elasticsearch2.安装配置kibana四.使用filebeat配置ng

文章目录



  • 一.ELK介绍


    • 1.ELK的提出

    • 2.ELK简介


  • 二.日志收集分类

  • 三.安装部署ELK


    • 1.安装配置elasticsearch

    • 2.安装配置kibana


  • 四.使用filebeat配置nginx日志收集


    • 1.filebeat收集nginx日志信息

    • 2.filebeat收集nginx的JSON日志信息

    • 3.filebeat收集nginx的自定义索引日志信息


      • 3.1 filebeat收集单台nginx的自定义索引日志信息

      • 3.2 filebeat收集多台nginx的自定义索引日志信息


    • 4.filebeat收集nginx的正确和错误日志信息


      • 4.1 filebeat收集单台nginx的正确和错误日志信息

      • 4.2 filebeat收集多台nginx的正确和错误日志信息



一.ELK介绍

1.ELK的提出

1.一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。
2.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。
3.常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
4.ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

2.ELK简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输到Elasticsearch,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

二.日志收集分类

代理层:nginx,haproxy
web层:nginx,tomcat
数据库层:mysql,redis,mongo,elasticsearch
操作系统层:source,message

三.安装部署ELK

架构图

环境准备:

[[email protected] ~]# cat /etc/hosts
10.0.0.51 db01
10.0.0.52 db02
10.0.0.53 db03
[[email protected] ~]# cat /etc/hosts
10.0.0.51 db01
10.0.0.52 db02
[[email protected] ~]# cat /etc/hosts
10.0.0.51 db01
10.0.0.53 db03

1.安装配置elasticsearch

在db01操作:
安装部署elasticsearch:
1.安装Java
yum install -y java-1.8.0-openjdk.x86_64
2.下载安装软件
mkdir /data/soft -p
cd /data/soft/
rz -E
#上传elasticsearch-6.6.0.rpm
rpm -ivh elasticsearch-6.6.0.rpm
3.配置启动
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
4.检查是否安装成功(要隔一会才会启动起来)
netstat -lntup|grep 9200
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 6440/java
tcp6 0 0 ::1:9200 :::* LISTEN 6440/java
curl 127.0.0.1:9200
[[email protected] ~]#mkdir /data/elasticsearch
[[email protected] ~]#chown -R elasticsearch:elasticsearch /data/elasticsearch/
[[email protected] ~]# chmod a+x /data
[[email protected] ~]# chmod a+x /data/elasticsearch
[[email protected] ~]# ll -d /data
drwxr-xr-x 5 root root 60 Jul 10 17:15 /data
[[email protected] ~]# ll -d /data/elasticsearch/
drwxr-xr-x 3 elasticsearch elasticsearch 19 Jul 10 18:57 /data/elasticsearch/
[[email protected] ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-1 #节点名称
path.data: /data/elasticsearch #数据目录
path.logs: /var/log/elasticsearch #日志目录
bootstrap.memory_lock: true #锁定内存
network.host: 10.0.0.51 #绑定IP地址
http.port: 9200 #端口号
[[email protected] ~]#vim /etc/elasticsearch/jvm.options
#如果是1G的内存,需要修改一下这里的内存。改为512m
#如果是1G内存,则默认就可以了
-Xms1g
-Xmx1g
内存限制:
1.不要超过32G
2.最大最小内存设置为一样
3.配置文件设置锁定内存
4.至少给服务器本身空余50%的内存
2.修改配置:
[[email protected] ~]#cd /etc/elasticsearch/
[[email protected] elasticsearch]#systemctl edit elasticsearch
# 增加如下参数
[Service]
LimitMEMLOCK=infinity
3.重新启动:
systemctl daemon-reload
systemctl restart elasticsearch
systemctl status elasticsearch
4.查看是否启动成功
[[email protected] ~]# netstat -lntup|grep 9200
tcp6 0 0 10.0.0.51:9200 :::* LISTEN 8344/java
所有机子操作:
配置时间同步:
yum install ntpdate -y

2.安装配置kibana

在db01操作:
[[email protected] ~]# mkdir /data/soft -p
[[email protected] ~]# cd /data/soft
[[email protected] soft]# ls
elasticsearch-6.6.0.rpm
filebeat-6.6.0-x86_64.rpm
kibana-6.6.0-x86_64.rpm
安装配置kibana:
[[email protected] soft]# rpm -ivh kibana-6.6.0-x86_64.rpm
[[email protected] soft]#vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.51"
server.name: "m01"
elasticsearch.hosts: ["http://10.0.0.51:9200"]
kibana.index: ".kibana"
systemctl start kibana
systemctl status kibana
[[email protected] soft]# netstat -lntup|grep 5601
tcp 0 0 10.0.0.51:5601 0.0.0.0:* LISTEN 6250/node

查看:

http://10.0.0.51:5601/app/kibana#/home?_g=()


四.使用filebeat配置nginx日志收集

1.filebeat收集nginx日志信息

在db01操作:
收集nginx日志
1.安装nginx和ab工具
[[email protected] soft]# yum install nginx httpd-tools -y
2.启动测试
[[email protected] soft]#systemctl start nginx
[[email protected] soft]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1888/nginx: master
tcp6 0 0 :::80 :::* LISTEN 1888/nginx: master
[[email protected] soft]# ab -c 10 -n 100 10.0.0.51/
[[email protected] soft]# ab -c 10 -n 100 10.0.0.51/test.html
3.查看日志
[[email protected] soft]# tail -f /var/log/nginx/access.log
[[email protected] soft]# rpm -ivh filebeat-6.6.0-x86_64.rpm
[[email protected] soft]# cp /etc/filebeat/filebeat.yml /root
[[email protected] soft]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch:
hosts: ["10.0.0.51:9200"]
[[email protected] filebeat]# systemctl restart filebeat

查看:


用Kibana 分析日志:



2.filebeat收集nginx的JSON日志信息


在db01操作:
[[email protected] filebeat]# vim /etc/nginx/nginx.conf
#找到配置文件中log_format json 这部分,然后在其部分结束后面添加这一部分
log_format json '{ "time_local": "$time_local", '
'"remote_addr": "$remote_addr", '
'"referer": "$http_referer", '
'"request": "$request", '
'"status": $status, '
'"bytes": $body_bytes_sent, '
'"agent": "$http_user_agent", '
'"x_forwarded": "$http_x_forwarded_for", '
'"up_addr": "$upstream_addr",'
'"up_host": "$upstream_http_host",'
'"upstream_time": "$upstream_response_time",'
'"request_time": "$request_time"'
' }';
access_log /var/log/nginx/access.log json;
access_log /var/log/nginx/access.log ;#删除这一行
[[email protected] filebeat]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[[email protected] filebeat]# >/var/log/nginx/access.log
[[email protected] filebeat]# systemctl restart nginx
[[email protected] ~]# ab -c 10 -n 100 10.0.0.51/

因为跟之前的格式不一样了,所以删除之前的filebeat和kibana的项目,然后进行操作

删除filebeat项目:

删除kibana项目

问题及反思:

第一种情况:不断重启filebeat时,写入重复数据

[[email protected] filebeat]# systemctl restart filebeat

第二种情况:停掉filebeat时nginx写入数据

[[email protected] ~]# >/var/log/nginx/access.log

[[email protected] ~]# ab -c 10 -n 100 10.0.0.51/

[[email protected] ~]# systemctl stop filebeat

[[email protected] ~]# ab -c 10 -n 100 10.0.0.51/

[[email protected] ~]# systemctl start filebeat

[[email protected] ~]# ab -c 20 -n 20 10.0.0.51/

此时nginx改为JSON格式后,filebeat并没有识别,因此需要修改下面配置文件

在db01操作:
[[email protected] soft]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
#添加这2行(注意这2行代码的位置,不然会实现不了效果):
json.keys_under_root: true//这2行把整串字符变成键值处理,可以针对某个键值处理)
json.overwrite_keys: true
output.elasticsearch:
hosts: ["10.0.0.51:9200"]
删除filebeat和kinaba的项目,然后执行下面命令
[[email protected] filebeat]# systemctl restart filebeat
制造日志:
[[email protected] ~]# >/var/log/nginx/access.log
[[email protected] ~]# ab -c 100 -n 100 http://10.0.0.51/abcx200s404.html

查看


3.filebeat收集nginx的自定义索引日志信息


3.1 filebeat收集单台nginx的自定义索引日志信息

按照需求自定义索引,使得可以不出现那么多干扰的搜索功能

先删除filebeat和kibana的项目,然后进行操作
在db01操作:
[[email protected] filebeat]# >/etc/filebeat/filebeat.yml
[[email protected] filebeat]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
setup.kibana:
host: "10.0.0.51:5601"
output.elasticsearch:
hosts: ["10.0.0.51:9200"]
index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
~
~
"filebeat.yml" 19L, 409C written
[[email protected] filebeat]# systemctl restart filebeat
[[email protected] filebeat]# ab -c 100 -n 100 10.0.0.51/

查看:


3.2 filebeat收集多台nginx的自定义索引日志信息

部署3台机子:
先删除filebeat和kibana的项目,然后进行操作
在db02和db03操作:
mkdir /data/soft -p
在db01操作:
cd /data/soft
上传filebeat-6.6.0-x86_64.rpm
scp filebeat-6.6.0-x86_64.rpm db02:/data/soft/
scp filebeat-6.6.0-x86_64.rpm db03:/data/soft/
scp /etc/nginx/nginx.conf db02:/etc/nginx
scp /etc/nginx/nginx.conf db03:/etc/nginx
scp /etc/filebeat/filebeat.yml db02:/etc/filebeat/filebeat.yml
scp /etc/filebeat/filebeat.yml db03:/etc/filebeat/filebeat.yml
>/var/log/nginx/access.log
ab -c 100 -n 100 10.0.0.51/
ab -n 100 -c 100 http://10.0.0.52/
ab -n 100 -c 100 http://10.0.0.53/
ab -n 100 -c 100 http://10.0.0.52/db02.html
ab -n 100 -c 100 http://10.0.0.53/db03.html
在db02和db03操作:
cd /data/soft/
rpm -ivh filebeat-6.6.0-x86_64.rpm
yum makecache fast
yum install -y nginx
nginx -t
systemctl start nginx
systemctl start filebeat
tail -f /var/log/nginx/access.log
cat /etc/filebeat/filebeat.yml

访问:



4.filebeat收集nginx的正确和错误日志信息


4.1 filebeat收集单台nginx的正确和错误日志信息

先删除filebeat和kibana的项目,然后进行操作
在db01操作:
[[email protected] soft]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
tags: ["access"]
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["error"]
setup.kibana:
host: "10.0.0.51:5601"
output.elasticsearch:
hosts: ["10.0.0.51:9200"]
#index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
indices:
- index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "access"
- index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "error"
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[[email protected] soft]# systemctl restart filebeat
[[email protected] soft]# ab -n 100 -c 100 http://10.0.0.51/db01.html

查看:



4.2 filebeat收集多台nginx的正确和错误日志信息

上面的操作只能查一台,下面让其可以查多台分类日志:

在db01操作:
[[email protected] soft]# scp /etc/filebeat/filebeat.yml db02:/etc/filebeat/filebeat.yml
[email protected]'s password:
filebeat.yml 100% 729 584.9KB/s 00:00
[[email protected] soft]# scp /etc/filebeat/filebeat.yml db03:/etc/filebeat/filebeat.yml
[email protected]'s password:
filebeat.yml 100% 729 715.8KB/s 00:00
在db02和db03操作:
[[email protected] soft]# systemctl restart filebeat
[[email protected] soft]# systemctl restart filebeat
在db01操作:
[[email protected] soft]# ab -n 100 -c 100 http://10.0.0.51/db01.html
[[email protected] soft]# ab -n 100 -c 100 http://10.0.0.52/db02.html
[[email protected] soft]# ab -n 100 -c 100 http://10.0.0.53/db03.html


本文地址:https://blog.csdn.net/weixin_44736359/article/details/107288965



推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • 三、寻找恶意IP并用iptables禁止掉找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行, ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有