超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

  • 前言
  • 1、基础环境和所需要的软件包
    • 1.1服务器配置(仅供参考)
    • 1.2 所需要的软件包与下载方式
      • 方式一:下载本机后上传服务器(适合本机能稳定快速下载国外资源的情况)
      • 方式二:wget直接下载到服务器
  • 2、lnmp环境(本文使用完整的lnmp1.9-full安装包)
    • 2.1 lnmp一键安装包
    • 2.3 nginx相关设置
  • 3、ELK环境
    • 3.1 ELK安装
    • 3.2 Elasticsearch安装
    • 3.3 Kibana安装
    • 3.4 Logstash安装
    • 3.5 启动EK(EK都使用es用户运行,推荐多开几个终端,分别监控)
  • 4、ELK读取并监控Nginx日志
    • 4.1 分析Nginx日志格式
    • 4.2 编写自己的Logstash配置文件
    • 4.3 启动
  • 5、Kibana界面操作
    • 5.1 Kibana DIscover概览
    • 5.2 Kibana 大地图显示IP所在地
  • 6、可能遇到的问题与解决方法
    • 6.1 第一次启动es出现问题
    • 6.2 为什么日志格式没生效
    • 6.3 为什么在kibana创建地图时说视图中没有地理字段
    • 6.4 为什么地理属性是geo_point,但是地址无法显示

前言

本教程是基于一台CentOS7的虚拟机完成搭建,若没有特地说明,命令均使用root执行。
因为ELK环境对机器要求不低,若是以本文做学习用途,建议新开一台虚拟机,准备好对应的基础环境即可。
阅读本文需要基础的Nginx命令与概念知识,需了解基础的Linux命令与Nginx的配置文件编写语法。

本文全程会使用绝对路径,所以请对路径问题放心。

本文仅会对ELK相关的使用做出简单介绍与基础教学,并不涉及ELK的底层原理等“硬核”知识,本文的主要是目标是能实现标题所述,并能使各位读者基于本文做出适合自己的日志监控系统。

!!!生产环境请注意以下内容!!!
生产环境极度不建议将ELK全部搭建在一台服务器上,涉及到端口占用、内存CPU压力等问题。建议方式是Elasticsearch和Kibana在一台服务器,Logstash在Nginx日志产生服务器上。
也可以使用占用资源更少的FileBeats做日志收集再传送到ELK服务器,本文不做介绍。
!!!生产环境请注意以上内容!!!

1、基础环境和所需要的软件包

1.1服务器配置(仅供参考)

系统:CentOS7
内存:4g
CPU:4核
存储:30g
网络:必需

1.2 所需要的软件包与下载方式

本文所有软件包保存路径:/usr/local/src/

方式一:下载本机后上传服务器(适合本机能稳定快速下载国外资源的情况)

lnmp完整安装包:lnmp1.9-full (官方云盘链接,放心下载,选择lnmp1.9-full.tar.gz即可,解压即用无需再下载其他主要程序包)
Elasticsearch压缩包:Elasticsearch8.5.0下载页面(下载页面显示所有系统对应的版本,本文将使用Linux x86_64版本,具体视情况而定)
Kibana压缩包:Kibana8.5.0下载页面(下载页面显示所有系统对应的版本,本文将使用Linux x86_64版本,具体视情况而定)
Logstash压缩包:Logstash8.5.0下载页面(下载页面显示所有系统对应的版本,本文将使用Linux x86_64版本,具体视情况而定)

方式二:wget直接下载到服务器

(不推荐)lnmp一键安装包体积小,在服务器上在线下载约1g内容,在线安装,对服务器的网络要求偏高

wget http://soft.vpser.net/lnmp/lnmp1.9.tar.gz

Elasticsearch8.5压缩包,完整版

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.0-linux-x86_64.tar.gz

Kibana8.5.0压缩包,完整版

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.5.0-linux-x86_64.tar.gz

Logstash8.5.0压缩包,完整版

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.5.0-linux-x86_64.tar.gz

全部软件包截图如下

2、lnmp环境(本文使用完整的lnmp1.9-full安装包)

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。 PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

2.1 lnmp一键安装包

解压完整安装包

tar -xvf lnmp1.9-full.tar

进入文件夹

cd lnmp1.9-full/

输入安装命令,进入lnmp的mysql安装选择界面。

./install.sh lnmp


按需求选择数据库版本,若已存在数据库则选择不安装,本文使用第5项:MySQL 5.6.51
选择完版本后依次是输入数据库root账户密码、是否启用InnoDB引擎,如下图所示。

按需求选择PHP版本,本文PHP安装全部使用默认设定。
选择完版本后选择是否使用内存优化,本文选择默认不启用,如下图所示。

接下来按下随意按钮即可开始跑码安装,在安装过程中会出现“错误,xxx未安装”等错误提示,此时不用处理,所有缺少的东西lnmp安装包会自动全部帮我们安装好。
安装过程较慢,请耐心等待。

跑码完成后,可以向上滑动一下记录查看是否全部ok,如下图。

lnmp所有的目录都在/usr/local/下,如下图。

到此,LNMP环境搭建完毕,若完全按照本文一样配置安装却有和本文不一致的地方,请查阅文末的《可能遇到的问题与解决方法》篇。

2.3 nginx相关设置

首先将nginx命令加入环境变量,这样以后就不用每次都要通过文件夹名进行nginx状态控制(注意,存在多个nginx版本的情况下请勿执行以下操作)。

使用vim打开环境变量所在的文件。

vim /etc/profile

在profile文件的末尾加上以下内容(注意,这是路径为nginx安装路径,如果是使用lnmp安装可以直接使用以下路径)。

PATH=$PATH:/usr/local/nginx/sbin

wq退出后,重新加载profile文件。

source /etc/profile

输入nginx -v查看命令是否生效。

进入nginx配置文件夹,做好nginx.conf的备份。

cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak1

运行前照例跑一下配置文件测试,虽然全新的nginx没这个必要,但是做好准备总没有坏处

nginx -t

启动nginx。

nginx

访问你的服务器地址,端口号默认80,当出现下图界面后则表示lnmp全套环境安装完毕,可以在此网页查看本地环境。

生产环境请注意探针、phpmyadmin、phpinfo这些界面的加密,或者干脆删除这些页面。

3、ELK环境

ELK是Elasticsearch、Kibana和Logstash这三个服务的首字母简称,其中Elasticsearch负责数据的存储与索引,Kibana负责可视化面板对数据的显示与分析,Logstash负责采集日志数据给Elasticsearch消费。
需注意,ELK需要版本全部统一,不可以不同版本一起使用,否则会有比较严重的兼容性问题。
ELK全部来自同一家公司,界面优美、操作流畅、提供中文、安装简单,而且免费开源。其更新速度也是非常的快,基本维持一个星期一个小版本更新的速度,本文完成时ELK已经更到了8.5.1(明明刚开始写的时候才8.5.0,是我写太慢了啊哈哈)。

3.1 ELK安装

ELK在启动时有的不支持root账户,有的不推荐root账户,为了方便起见,我们创建一个专门的启动用户,新建用户组es并创建用户es

#新增用户es
useradd es
#给es设个密码
passwd es
#新增用户组es
#某些Linux系统在新增用户后自动为他创建组,下面两条命令具体情况视情况看是否需要执行。
groupadd es
#将用户es添加进es组
gpasswd -a es es

本文的ELK将会放在一个统一文件夹内,在路径/usr/local/下新建文件夹,并将其授权给es用户

#前往local目录
cd /usr/local/
#创建文件夹elk用来放三个服务的文件
mkdir elk
#将elk目录的拥有者设定为上面创建的es
chown -R es:es elk

3.2 Elasticsearch安装

前往我们的安装包保存路径,解压后直接移动到上文中创建好的elk文件夹中。然后将Elasticsearch文件夹也给es用户授权

#前往安装包保存路径
cd /usr/local/src/
#解压
tar -xvf elasticsearch-8.5.0-linux-x86_64.tar.gz
#将解压好的文件夹移动到elk文件夹中
mv elasticsearch-8.5.0 /usr/local/elk/
#再次授权(请注意命令和上文不同)
chown -R es:es /usr/local/elk/*
#进入elk目录,将elasticsearch-8.5.0权限提到最高
cd usr/local/elk/
chmod 777 elasticsearch-8.5.0/
ll
#完成应如下图所示

安装完毕,接下来开始配置Elasticsearch的配置文件,此部分需要基础的vim操作知识,包括查找、显示行号等操作。

#使用vim打开Elasticsearch配置文件
vim /usr/local/elk/elasticsearch-8.5.0/config/elasticsearch.yml

在Network部分打开network.host和http.port的注释,并且修改为服务器的本地ip,如下两图。请注意,若9200端口被占用则自行选择其他端口,若是新服务器则不要改动端口号。


保存退出后,前往Elasticsearch的程序住目录,切换用户es并进行第一次启动。

若出现问题请参考文末《可能遇到的问题与解决方案》

cd /usr/local/elk/elasticsearch-8.5.0/bin/
su es
./elasticsearch

第一次启动后应该可以看到终端上充满了密钥,这时elasticsearch的配置文件已经发生了变化,启动了安全认证模块。然而这个安全认证模块非常麻烦,需要证书不说,其他Kibana和Logstash的配置也会进一步变得麻烦,所以我们这里Ctrl+C关掉elasticsearch,前往配置文件继续修改。

vim /usr/local/elk/elasticsearch-8.5.0/config/elasticsearch.yml


保存退出后,Elasticsearch相关安装已经完成,随时可以启动。

3.3 Kibana安装

切换回root,前往安装包保存目录解压,然后移动到elk文件,同时给es用户授权

#前往安装包保存目录
cd /usr/local/src/
#解压并移动
tar -xvf kibana-8.5.0-linux-x86_64.tar.gz
mv kibana-8.5.0 /usr/local/elk/
#授权
chown -R es:es /usr/local/elk/*
chmod 777 /usr/local/elk/kibana-8.5.0/

完成授权后进入kibana目录,开始编辑kibana的配置文件,修改内容有kibana自身的地址与端口、对应的elasticsearch的地址与端口、调整kibana的面板语言。

vim /usr/local/elk/kibana-8.5.0/config/kibana.yml
解开端口与地址的注释,一般情况下不要改动默认端口5601,仅修改host即可。



修改对应的elasticsearch地址与端口,和上文elasticsearch部分中自己设定的数据保持一致。

修改kibana面板语言。

保存退出后完成kibana的安装,以后随时可以启动。

3.4 Logstash安装

进入安装包保存目录,解压后移动到elk文件夹,并给es用户授权。

#前往安装包保存目录
cd /usr/local/src/
#解压并移动
tar -xvf logstash-8.5.0-linux-x86_64.tar.gz
mv logstash-8.5.0 /usr/local/elk/
#授权
chown -R es:es /usr/local/elk/*
chmod 777 /usr/local/elk/logstash-8.5.0/

完成授权后编辑logstash的配置文件,需要修改的内容是ECS Compatibility,将其关闭,目的是为了GeoIP地图显示功能做准备.

vim /usr/local/elk/logstash-8.5.0/config/logstash.yml


3.5 启动EK(EK都使用es用户运行,推荐多开几个终端,分别监控)

进入Elasticsearch目录,启动Elasticsearch

#切换用户为es
su es
#前往Elasticsearch的bin目录
cd /usr/local/elk/elasticsearch-8.5.0/bin/
#启动
./elasticsearch

新开一个终端,前往Kibana目录,启动Kibana

#切换用户为es
su es
#前往Kibana的bin目录
cd /usr/local/elk/kibana-8.5.0/bin/
#启动
./kibana

当看到kibana准备就绪就说明启动完成

使用浏览器输入之前设定的kibana的ip和端口,看到中文界面即可

本文设定的ip与地址
http://192.168.3.16:5601

4、ELK读取并监控Nginx日志

我们在调试ELK的时候Elasticsearch和Kibana都可以不关闭不重启,主要都是在操作logstash的配置文件。

4.1 分析Nginx日志格式

首先查看一下目前的Nginx格式

cat /usr/local/nginx/conf/nginx.conf

可以发现这个lnmp包帮我们安装的nginx并没有设置任何格式,所以我们可以自己手动设置一个。

nginx日志格式有两种设置方式,一种是写成json格式(如下图1),一种是原生形式的日志格式(如下图2)。从我们使用ELK的角度来讲,json格式是对日志收集与解析非常友好的。
不过考虑到如果有读者阅读本文的目的是在已有的nginx上读取旧的日志,那么冒然改动nginx日志格式明显是不现实的,所以本文将会在主要围绕json格式的基础上带着说一点原生形式日志格式的解析方式。

编辑nginx.conf文件

 vim /usr/local/nginx/conf/nginx.conf#在http段中添加json日志格式

这里的具体格式是具体情况而定,只要是json格式即可,其中IP地址是必须的

 28         log_format main_json '{"time": "$time_local", '29                       '"remote_addr": "$remote_addr", '30                       '"referer": "$http_referer", '31                       '"request": "$request", '32                       '"status": $status, '33                       '"bytes": $body_bytes_sent, '34                       '"agent": "$http_user_agent", '35                       '"x_forwarded": "$http_x_forwarded_for", '36                       '"up_addr": "$upstream_addr",'37                       '"up_host": "$upstream_http_host",'38                       '"up_resp_time": "$upstream_response_time",'39                       '"request_time": "$request_time"'40                       ' }';41 42          access_log  /home/wwwlogs/accessjson.log main_json;


或者使用原生nginx日志格式如下图,这里仅举个例子做参考,本文并不使用。

可以看出来和json格式相比,原生日志是没有“key”值的,所以如果使用原生日志格式我们需要额外的使用正则表达式将日志格式解析出来,具体情况可以搜索
grok解析非json格式日志文件。

编辑完成后测试一下配置文件,若success则重新启动nginx

nginx -t
nginx -s reload

若日志未生效,请查看文末《可能遇到的问题与解决方法》
若生产环境无法获得日志格式,请联系您的管理员

4.2 编写自己的Logstash配置文件

本文是在一台虚拟机上进行日志收集,访问ip都是192.168段,所以无法被geoip识别到,因此本文直接使用生产环境中的一个即将过期的waf防火墙日志来进行下一步演示,日志格式为json,所有关键字段和日志内容均作打码处理。

Logstash的配置文件是需要自己写的,但是不用担心,我们使用了json格式后配置文件的编写将会非常容易。
前往logstash主目录,并新建一个conf文件,本文采用test.conf作为文件名。

请注意!在output中的index索引名前面必须要加上“logstash-”,否则无法解析道IP所在的地理位置。

cd /usr/local/elk/logstash-8.5.0/
vim test.conf
input{file{path => "日志存储路径/*.log"start_position => "beginning"sincedb_path => "/dev/null"codec => json}
}filter {geoip {source => "在json中IP对应的字段名"}
}output{elasticsearch{hosts => "192.168.3.16:9200"index => "logstash-想一个索引名"}stdout {}
}

下图中output中的es-hsot和上文不符,已上文的192.168.3.16为准。

这里给一个例子:

input{file{path => "/usr/local/nginx/logs/hack/*.log"start_position => "beginning"sincedb_path => "/dev/null"codec => json}
}filter {geoip {source => "realIP"}
}output{elasticsearch{hosts => "192.168.3.16:9200"index => "logstash-test"}stdout {}
}

4.3 启动

进入logstash主目录,使用root用户启动logstash

./bin/logstash -f test.conf

当看到终端上出现日志中的数据时,则表明logstash启动成功。

5、Kibana界面操作

到了这一步,ELK的搭建与日志解析已经全部完成,下面开始做数据分析和可视化展示
再次访问我们的kibana页面



索引模式和右边列表中匹配,名称请打全。


5.1 Kibana DIscover概览


正常显示Discover

5.2 Kibana 大地图显示IP所在地

前往仪表盘设置大地图


地图首次加载会较慢,耐心等待地图出现即可

到这里,集群地图显示IP地理位置已经完成。

6、可能遇到的问题与解决方法

6.1 第一次启动es出现问题


解决方法:修改最大虚拟内存

6.2 为什么日志格式没生效

查看一下nginx.conf中http段的accesslog开关是否打开,默认是关闭的。

6.3 为什么在kibana创建地图时说视图中没有地理字段

1、logstash的配置文件中的ECS Compatibility未设置成disabled,详情请看3.4部分
2、在logstash配置文件的output中的index索引名前面必须要加上“logstash-”,否则无法解析道IP所在的地理位置。详情请看4.2部分。

6.4 为什么地理属性是geo_point,但是地址无法显示

GeoIP需要真实的外网地址,虚拟机内测试产生的192.168等局域网IP是无法解析的。

【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版相关推荐

  1. 【算法】超详细的遗传算法(Genetic Algorithm)解析

    转自:https://www.jianshu.com/p/ae5157c26af9 [算法]超详细的遗传算法(Genetic Algorithm)解析 00 目录 遗传算法定义 生物学术语 问题导入 ...

  2. 详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,以及常见问题或注意事项解答,本文主要以匿名上位机为例,适合新手和小白

      本文主要内容:详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,帮助我们调节一些参数,比如电机PID的调节.波形融合等,以及在我们写通信协议的时候 ...

  3. 从零学ELK系列(十):SpringBoot项目接入ELK升级版(超详细图文教程)

    前言 之前在<从零学ELK系列(八):SpringBoot项目接入ELK(超详细图文教程)>中演示了SpringBoot项目接入ELK,后来项目中对这部分进行了优化,之前博文中也有读者问到 ...

  4. Linux下Docker如何挂载启动nginx(超详细)

    前言:随着docker越来越火爆,很多东西都可以部署在docker上面:使用docker方便管理我们的应用:这篇博客将教会你如何使用docker部署nginx! 准备工作:部署好docker联网的li ...

  5. 【超详细系列】从0到1搭建一款二次元个人博客

    一.概述 本文图文并茂并以通俗易懂的语言讲解了搭建一款个人博客的整个过程,因博主比较喜欢二次元风格,因此选择了二次元博客主题,当然,主题是可选择的,如果你更喜欢成熟稳重的博客风格,也可以随时更换. 效 ...

  6. cka教程_2020年11月新版CKA考试心得

    博主本人刚刚参加完2020年11月的CKA认证考试,由于报名时是去年12月(拖了快一年),当时还没有中国代理区的考试选项,所以仍旧是考的英语.大体步骤网上已经有不少介绍了,这里推荐几篇文章. 但这些文 ...

  7. nginx配置文件nginx.conf超详细讲解

    转载文章:https://www.cnblogs.com/liang-wei/p/5849771.html #nginx进程,一般设置为和cpu核数一样,负载以cpu密集型为主,则设置为与cpu核数相 ...

  8. Xshell的使用;用Xshell修改服务器 Nginx配置文件-超详细(以修改上传文件大小上限为例)

    好多服务器都用Nginx做代理,当客户端上传视频,压缩包等文件时,往往会有一个设置上传文件最大限制的设置,我们以更改上传文件最大限制为例,从登录开始进行配置文件的修改. 适合哪些入职不久的前端吧~~~ ...

  9. Linux安装Nginx(超详细步骤)

    1,进入官网下载Nginx资源: 官网下载:http://nginx.org/en/download.html 2,资源下载(因为是在Linux安装,所以我下载Linux安装的资源包,版本你们随意) ...

最新文章

  1. Python十大装腔语法
  2. 设计模式在工作中的实践
  3. spark-机器学习实践-K近邻应用实践一
  4. MySQL实验四数据库的查询_MySQL数据库实验四:嵌套查询
  5. 推荐系统入门:作为Rank系统的推荐系统(协同过滤)
  6. Yii2系列教程三:Database And Gii
  7. Python中的unittest模块(入门学习款)
  8. c语言学生管理系统下载,学生管理系统(C语言)
  9. CSDN 的 Markdown 编辑器语法
  10. 3GPP 5G协议下载地址
  11. 基于Python的网络爬虫与数据可视化分析
  12. java file exists用法_Java File exists()方法
  13. [避坑] C/C++ 如何实现文件输入输出
  14. 实现极致节能,维谛技术(Vertiv)有哪些特殊技能?
  15. iOS应用程序内存泄露的监测
  16. win10 切换用户、注销、睡眠等
  17. 使用Tansformer分割三维腹部多器官--UNETR实战
  18. Debian侵犯Rust商标,妥协改名还是会得到豁免?
  19. Swiper实现两种常用轮播图
  20. 基于Paddle的截图OCR文字识别的实现

热门文章

  1. BIM Revit2017下载安装教程及安装包
  2. 30天自制操作系统:第十天 叠加处理
  3. Android设备,查看已连接的Wifi密码
  4. Android 查看wifi密码
  5. 构建完善的帮助中心,降低企业客户服务成本
  6. UltralSO制作启动盘显示报错:磁盘/映像容量太小
  7. 计算机组成原理(2)各个硬件的工作原理
  8. django用户注册、登录、注销和用户扩展
  9. DOM节点操作----节点层级
  10. Spring Boot-整合redis(六)