前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建ELK日志分析系统详解

搭建ELK日志分析系统详解

作者头像
小手冰凉
发布2019-10-15 10:19:10
1.6K0
发布2019-10-15 10:19:10
举报
文章被收录于专栏:小手冰凉小手冰凉

日志分析是我们运维解决系统故障、发现问题的主要手段。为了可以集中管理多台服务器的日志记录,开源实时日志分析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平台:

一、准备工作:

搭建ELK日志分析系统详解
搭建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节点配置:

代码语言:javascript
复制
[root@node1 /]# hostname                       # 修改主机名
node1
[root@node1 /]# vim /etc/hosts               # 配置解析文件,添加如下两行
............................
192.168.1.10    node1
192.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基本相似):

代码语言:javascript
复制
[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配置:

代码语言:javascript
复制
[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配置:

代码语言:javascript
复制
[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)? yes
Warning: 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 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      4074/java

3、查看节点信息: node1:

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

node2:

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

代码语言:javascript
复制
[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 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      49967/grunt         
[root@node1 /]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      49874/java          

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

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

代码语言:javascript
复制
[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服务器(自行搭建网站):

代码语言:javascript
复制
[root@Web ~]# systemctl start httpd         #启动httpd服务
[root@Web ~]# java -version                  #检查Java环境是否为1.8
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)
[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 查看索引是否创建:

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

  • 索引:类似于关系数据库中的“库”;
  • 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,添加索引:

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
搭建ELK日志分析系统详解

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

搭建ELK日志分析系统详解
搭建ELK日志分析系统详解
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档