千家信息网

搭建ELK日志分析系统详解

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,日志分析是我们运维解决系统故障、发现问题的主要手段。为了可以集中管理多台服务器的日志记录,开源实时日志分析ELK平台应用而生,ELK由Elasticsearch、Logstash和Kibana三个开源
千家信息网最后更新 2024年11月11日搭建ELK日志分析系统详解

日志分析是我们运维解决系统故障、发现问题的主要手段。为了可以集中管理多台服务器的日志记录,开源实时日志分析ELK平台应用而生,ELK由Elasticsearch、Logstash和Kibana三个开源工具组成,这三个工具可以分别部署在不同的服务器上,并且相互关联,不过需要收集哪台服务器的日志,就必须在该服务器上部署Logstash。ELK的官网是:https://www.elastic.co/cn/
.

ELK的工作原理如下(懂得其中原理,才可部署一个高可用的ELK平台):
Logstash收集APPServer(应用服务器)产生的log,并存放到Elasticsearch群集中,而Kibana则从Elasticsearch群集中查询数据生成图表,在返回给browser(浏览器)。简单来说,进行日志处理分析,一般需要以下几个步骤:

  • Logstash将日志进行集中化管理。
  • 将日志格式化(Logstash)并输出到Elasticsearch。
  • Elasticsearch对格式化后的数据进行索引和存储。
  • Kibana对前端数据的展示。

搭建ELK平台:

一、准备工作:

1、Node1、Node2节点内存最少分配4G,Apache节点无所谓。
2、下载所需软件包:https://pan.baidu.com/s/1aP7GDiRBdXzCZBbgiP1fAw
提取码:spuh
复制这段内容后打开百度网盘手机App,操作更方便哦三台服务器都要挂载我提供的.iso文件。
3、修改节点服务器名称,并通过本地/etc/hosts配置域名解析,检查Java环境,必须是Java 1.8或更高的版本
4、放行防火墙相关端口的流量,为了方便我直接关闭了防火墙。
5、所有服务器的时间最好同步,可以搭建时间同步服务器,也可手动同步。
node1节点配置:

[root@node1 /]# hostname                       # 修改主机名node1[root@node1 /]# vim /etc/hosts               # 配置解析文件,添加如下两行............................192.168.1.10    node1192.168.1.20    node2[root@node1 /]# java -version              # 检查Java环境openjdk version "1.8.0_102"OpenJDK Runtime Environment (build 1.8.0_102-b14)OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

node2节点配置(跟node1基本相似):

[root@node2 /]# hostname           # 修改主机名node2[root@node2 /]# vim /etc/hosts           # 编写解析配置文件..............................192.168.1.10    node1                  # 添加192.168.1.20    node2                  # 添加[root@node2 /]# java -version             # 检查Java环境openjdk version "1.8.0_102"OpenJDK Runtime Environment (build 1.8.0_102-b14)OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

二、安装Elasticsearch:
1、node1配置:

[root@node1 /]# mount /dev/sr0 /media/             # 挂载elk软件包[root@node1 /]# cd /media/[root@node1 media]# cp * /usr/src/            # 复制所有文件[root@node1 media]# cd /usr/src/[root@node1 src]# rpm -ivh elasticsearch-5.5.0.rpm           # 安装[root@node1 src]# systemctl daemon-reload [root@node1 src]# systemctl enable elasticsearch.service [root@node1 /]# vim /etc/elasticsearch/elasticsearch.yml   #修改主配置文件#修改如下,注意删除注释符号cluster.name: my-elk-cluster                #群集名字node.name: node1                              #节点名字path.data: /data/elk_data                     #数据存放路径path.logs: /var/log/elasticsearch/         #日志存放路径bootstrap.memory_lock: false             #在启动的时候不锁定内存network.host: 0.0.0.0                          #提供服务绑定的IP地址,0.0.0.0代表所有地址http.port: 9200                                      #侦听端口discovery.zen.ping.unicast.hosts: ["node1", "node2"]             #群集发现通过单播实现[root@node1 /]# mkdir -p /data/elk_data             #创建数据存放目录    [root@node1 /]# chown elasticsearch:elasticsearch            #更改属主及属组 /data/elk_data/[root@node1 /]# systemctl start elasticsearch.service            # qi'do启动服务[root@node1 /]# netstat -anpt | grep 9200        #端口号不会立马看到,启动服务后再等待十秒左右才可查看到     tcp6       0      0 :::9200                 :::*                    LISTEN      3992/java           

2、node2配置:

[root@node2 /]# mount /dev/sr0 /media/          # 挂载elk软件包[root@node2 /]# cd /media/[root@node2 media]# cp * /usr/src/[root@node2 /]# cd /usr/src/[root@node2 src]# rpm -ivh elasticsearch-5.5.0.rpm           # 安装[root@node2 src]# systemctl daemon-reload [root@node2 src]# systemctl enable elasticsearch.service [root@node2 /]# scp root@192.168.1.10:/etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/               # 将node1配置文件复制过来The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.ECDSA key fingerprint is 68:df:0f:ac:c7:75:df:02:88:7d:36:6a:1a:ae:27:23.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts.root@192.168.1.10's password:          # 输入密码elasticsearch.yml                                    100% 2853     2.8KB/s   00:00    [root@node2 /]# vim /etc/elasticsearch/elasticsearch.yml           #稍作修改node.name: node2                #就更改一下节点名称即可,其余不变[root@node2 /]# mkdir -p /data/elk_data                # 创建数据存放目录[root@node2 /]# chown elasticsearch:elasticsearch  /data/elk_data/               # 设置属主属组[root@node2 /]# systemctl start elasticsearch.service [root@node2 /]# netstat -anpt | grep 9200tcp6       0      0 :::9200                 :::*                    LISTEN      4074/java

3、查看节点信息:
node1:

node2:

访问http://192.168.1.10:9200/_cluster/health?pretty 查看群集的健康状态:

访问http://192.168.1.10:9200/_cluster/state?pretty 查看群集的状态信息:

通过以上方式查看群集状体对我们显示的并不友好,可以通过安装Elasticsearch-head插件,可以更方便的管理群集:
.
在node1安装Elasticsearch-head插件(需要提前安装node和phantomjs):

[root@node1 /]# cd /usr/src/[root@node1 src]# tar zxf node-v8.2.1.tar.gz             # 解压node源码包[root@node1 src]# cd node-v8.2.1/[root@node1 node-v8.2.1]# ./configure && make && make install #安装,时间较长,约需40分钟左右[root@node1 src]# tar jxf  phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/[root@node1 bin]# cp phantomjs /usr/local/bin/            #复制该文件到指定目录[root@node1 src]# tar zxf elasticsearch-head.tar.gz [root@node1 src]# cd elasticsearch-head/[root@node1 elasticsearch-head]# npm install             # 安装依赖包[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml                 #编辑主配置文件,在任意位置添加如下两行:http.cors.enabled: true                #添加该行,开启跨域访问支持http.cors.allow-origin: "*"             #添加该行,跨域访问允许的域名地址[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service               # 重启服务使配置生效[root@node1 elasticsearch-head]# npm run start &        #设置服务后台启动,如果前台启动,一旦关闭中断,服务也将关闭。#并且启动服务时,必须在解压后的elasticsearch-head下启动服务,#进程会读取该目录下的一个文件,否则可能启动失败。[root@node1 /]# netstat -anpt | grep 9100tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      49967/grunt         [root@node1 /]# netstat -anpt | grep 9200tcp6       0      0 :::9200                 :::*                    LISTEN      49874/java          

通过浏览器访问http://192.168.1.10:9100 来查看群集信息:

4、安装Kibana(可单独安装在一台服务器上,本人囊中羞涩、资源有限,所以安装在了node1上):

[root@node1 /]# cd /usr/src/[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm [root@node1 src]# systemctl enable kibana.service [root@node1 src]# vim /etc/kibana/kibana.yml ........................              // 省略部分内容server.port: 5601          #Kibana打开的端口server.host: "0.0.0.0"               #Kibana侦听的地址,0.0.0.0代表该主机上的所有地址elasticsearch.url: "http://192.168.1.10:9200"                   #和Elasticsearch建立连接kibana.index: ".kibana"                      #在Elasticsearch中添加.kibana索引[root@node1 src]# systemctl start kibana.service 

5、配置apache服务器(自行搭建网站):

[root@Web ~]# systemctl start httpd         #启动httpd服务[root@Web ~]# java -version                  #检查Java环境是否为1.8openjdk version "1.8.0_102"OpenJDK Runtime Environment (build 1.8.0_102-b14)OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)[root@Web ~]# mount /dev/cdrom /media           #挂载我提供的.iso文件mount: /dev/sr0 写保护,将以只读方式挂载[root@Web ~]# cd /media[root@Web media]# rpm -ivh logstash-5.5.1.rpm                #安装logstash[root@Web media]# systemctl daemon-reload  [root@Web media]# systemctl enable logstash.service         #设置开机自启动[root@Web media]# cd /etc/logstash/conf.d/               #切换至指定路径[root@Web conf.d]# vim apache_log.conf        #编辑采集apache日志文件和系统日志#以下就以系统日志为例做解释,其余的照着来就行,格式都差不多input {      file{        path => "/var/log/messages"             #指定要收集的日志文件  type => "system"  #指定类型为system,可以自定义,type值和output{ } 中的type对应即可        start_position => "beginning"       #从开始处收集        }      file{        path => "/etc/httpd/logs/access_log"        type => "access"        start_position => "beginning"         }       file{         path => "/etc/httpd/logs/error_log"        type => "error"        start_position => "beginning"          }       }output {        if [type] == "system" {           #如果type为system,           elasticsearch {                  #就输出到Elasticsearch服务器             hosts => ["192.168.1.10:9200"]               #Elasticsearch监听地址及端口             index => "system-%{+YYYY.MM.dd}"           #指定索引格式                }             }        if [type] == "access" {  elasticsearch {             hosts => ["192.168.1.10:9200"]             index => "apache_access-%{+YYYY.MM.dd}"               }             }         if [type] == "error" {          elasticsearch {             hosts => ["192.168.1.10:9200"]             index => "apache_error-%{+YYYY.MM.dd}"             }          }          } #写完保存退出即可。[root@Web ~]# chmod o+r /var/log/messages           #赋予该目录其他人的读权限        [root@Web conf.d]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ #创建命令软连接[root@Web conf.d]# systemctl start logstash             #启动服务[root@Web conf.d]# logstash -f apache_log.conf &    #指定刚才编写文件为Logstash的配置文件,并且在后台运行

6、创建索引:
1、通过浏览器访问 http://192.168.1.10:9100 查看索引是否创建:

关于索引,有几个很重要的概念:

  • 索引:类似于关系数据库中的"库";
  • Type(编写Logstash时指定的type):类似于关系数据库中的"表";

刚才创建的索引,在我标记红框中,可以看到node1和node2对应的位置,都有绿色背景的0、1、2、3、4、5表示是该索引被分为了5个分片,其中因为在Logstash中指定的Elasticsearch服务器是node1,所以node1的分片是主分片,node2会自动同步node1的分片,node2的分片为备份分片,称为副本,用来提供数据冗余及负载分担。默认情况下,Elasticsearch自动对索引请求进行负载分担。

.
现在访问http://192.168.1.10:5601 登录到Kibana,添加索引:




关于apache的错误日志索引,自行添加即可,添加完毕后,单击"discover"即可,在下面的下拉列表选择一个索引,如apache_access-,可以查看相应的图表及日志信息:

服务 日志 文件 服务器 索引 配置 数据 节点 地址 目录 信息 格式 环境 端口 同步 检查 系统 分析 主机 平台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 简单的档案数据库 网络安全法自那天开始实施 斑马网络技术有限公司融资 日本软件开发待遇 黄山外协加工软件开发 怎么给路由器添加ftp服务器 河北新一代网络技术分类优势 软件开发面试在线笔试 我的世界搭建服务器需要钱吗 国家网络安全新闻事件 fusioncharts服务器 江西微商分销系统软件开发 交响曲下载软件开发 监控云服务器多少钱一个月 文件型数据库有哪些 初中网络安全手抄报漂亮简单带字 视觉软件开发工具包有哪些 以网络安全为议题 数据库单精度和双精度 南邮网络技术与应用考试 简单的档案数据库 数据库更新语 爱问云软件显示服务器内部异常 无为软件开发项目管理 删除数据库表中的特定数据库 云服务器管理平台有什么作用 初级中学网络安全讲话稿 如何将网络技术与自身专业相结合 灵牛网络技术有限公司 华为hana网络技术的前景
0