搭建ELK日志系统

一、环境准备

最近学习了下ELK系统,这里把自己搭建ELK的流程步骤记录下,以方便后面进行回顾。


搭建拓扑

因为本地资源原因,我在ES1上搭建部署Kibana展示ES集群所收集到的日志索引,资源充足的童鞋可以把Kibana部署为一个独立的服务器。 此拓扑架构,使用filebeat作为日志采集器(因为logstash的资源消耗高的原因,目前很多ELK架构中均是使用filebeat作为日志采集器),中间部署一Logstash服务器用作日志转发和过滤,最后Logstash将处理过的日志传输到ES集群并有kibana进行展示。另外对于日志量很高的环境,还可以在Logstash和filebeat之间部署redis服务器作为缓存手段,以保障Logstash能够正常处理转发相关的日志信息。

系统环境:Centos 6.9
软件版本:Elasticsearch 6.3.1、Logstash 6.3.1、Filebeat 6.3.1、kibana 6.3.1、jdk1.8
相关软件包下载地址:
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
ELK:https://www.elastic.co/downloads

二、搭建Elasticsearch集群

1、安装jdk

每一个ES服务器均需要安装jdk,我习惯使用tar包安装jdk,这样可以方便未来对jdk包进行更新。
首先下载相应的jdk包,并放置到指定的目录:

[root@ES1 ~]# cd /usr/local/src/
[root@ES1 src]# ll
total 181296
-rw-r--r--. 1 root root 185646832 Jul 22 15:30 jdk-8u181-linux-x64.tar.gz
[root@ES1 src]# tar zxf jdk-8u181-linux-x64.tar.gz
[root@ES1 src]# ln -sv /usr/local/src/jdk1.8.0_181/ /usr/local/jdk    #创建jdk链接目录,后续jdk更新只需要替换链接文件即可
`/usr/local/jdk' -> `/usr/local/src/jdk1.8.0_181/'
[root@ES1 src]# vim /etc/profile.d/jdk.sh
JAVA_HOME=/usr/local/jdk
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar
export JAVA_HOME JRE_HOME PATH CLASSPATH
[root@ES1 src]# source /etc/profile.d/jdk.sh
[root@ES1 src]# java -version      #此命令执行成功意味着jdk安装成功
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

重复上述步骤,在ES服务器上都安装jdk。

2、安装Elasticsearch

下载Elasticsearch 的rpm包,并放置在指定的目录下,此处我继续放置在/usr/local/src下:

[root@ES1 src]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm
[root@ES1 src]# rpm -ivh elasticsearch-6.3.1.rpm 
warning: elasticsearch-6.3.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                ########################################### [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
   1:elasticsearch          ########################################### [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using chkconfig
 sudo chkconfig --add elasticsearch
### You can start elasticsearch service by executing
 sudo service elasticsearch start
Created elasticsearch keystore in /etc/elasticsearch

#按照安装提示,添加开机自启动Elasticsearch服务
[root@ES1 src]# chkconfig --add elasticsearch
[root@ES1 src]# chkconfig elasticsearch on

按照上述步骤,在三台ES上均安装Elasticsearch服务。

3、配置启动Elasticsearch服务

在对应的ES服务器上修改其相应的Elasticsearch配置文件/etc/elasticsearch/elasticsearch.yml:

[root@ES1 src]# grep ^[a-Z] /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-cluster       #集群名字,用于识别网络中的ES是否为同一个集群
node.name: ES1      #集群节点的唯一标识
path.data: /elk/data     #数据目录,注意其属主和属组需为Elasticsearch用户
path.logs: /elk/logs    #日志目录
bootstrap.memory_lock: false
network.host: 192.168.0.91    #Elasticsearch监控的本机Ip
http.port: 9200    #Elasticsearch监控的端口
discovery.zen.ping.unicast.hosts: ["192.168.0.91", "192.168.0.92","192.168.0.93"]    #自动单播发现的主机列表
discovery.zen.minimum_master_nodes: 2    #设置集群中的节点至少知道多少个可以成为master的节点,通常建议设置为集群总节点数量/2+1

#创建相应的数据目录和日志目录并更改其属主和属组
[root@ES1 src]# mkdir -pv /elk/{data,logs}
mkdir: created directory `/elk'
mkdir: created directory `/elk/data'
mkdir: created directory `/elk/logs'
[root@ES1 src]# chown -R elasticsearch.elasticsearch /elk

配置完成后即可尝试启动Elasticsearch服务,不过有可能会出现类似如下的报错:

  • 错误1:缺少相应的java程序
[root@ES1 src]# service elasticsearch start
which: no java in (/sbin:/usr/sbin:/bin:/usr/bin)
Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME

解决办法:将相应的java程序链接到指定目录

[root@ES1 src]# ln -sv /usr/local/jdk/bin/java /usr/sbin/java
`/usr/sbin/java' -> `/usr/local/jdk/bin/java'
[root@ES1 src]# ln -sv /usr/local/jdk/bin/java /usr/bin/java
`/usr/bin/java' -> `/usr/local/jdk/bin/java'
  • 错误2:最大线程数不足
[1]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]

解决办法:

#修改指定用户的最大线程数或者所有用户的最大线程数
[root@ES1 src]# vim /etc/security/limits.d/90-nproc.conf
elasticsearch   soft    nproc   4096
elasticsearch   hard   nproc   4096
*          soft    nproc     1024
root       soft    nproc     unlimited

#修改完成后重新登录
  • 错误3:禁用bootstrap.system_call_filter
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决办法:修改/etc/elasticsearch/elasticsearch.yml配置文件,添加下述参数:

[root@ES1 src]# vim /etc/elasticsearch/elasticsearch.yml
bootstrap.system_call_filter: false

最后成功启动Elasticsearch服务,即可查看到已经监控的9200、9300端口:

[root@ES1 ~]# service elasticsearch start

[root@ES1 ~]# ss -tnl
State       Recv-Q Send-Q                                 Local Address:Port                                   Peer Address:Port 
LISTEN      0      128                              ::ffff:192.168.0.91:9200                                             :::*     
LISTEN      0      128                              ::ffff:192.168.0.91:9300                                             :::*     
LISTEN      0      128                                               :::22                                               :::*     
LISTEN      0      128                                                *:22                                                *:*     
LISTEN      0      100                                              ::1:25                                               :::*     
LISTEN      0      100                                        127.0.0.1:25                                                *:*     

curl能查看到下述类似输出即说明Elasticsearch服务运行正常:

[root@ES1 ~]# curl http://192.168.0.91:9200
{
  "name" : "ES1",
  "cluster_name" : "elk-cluster",
  "cluster_uuid" : "_na_",
  "version" : {
    "number" : "6.3.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "eb782d0",
    "build_date" : "2018-06-29T21:59:26.107521Z",
    "build_snapshot" : false,
    "lucene_version" : "7.3.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

最后在各ES服务器上配置启动完成Elasticsearch服务后,即可用curl查看相应ES集群的情况:

[root@ES1 ~]# curl -XGET  http://192.168.0.91:9200/_cat/nodes?v
ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.0.92           14          93   3    0.34    0.19     0.10 mdi       -      ES2
192.168.0.91           13          93   2    0.14    0.05     0.08 mdi       *      ES1
192.168.0.93           12          93  13    0.43    0.41     0.19 mdi       -      ES3

如能查看到上述信息,说明ES集群运行正常。

4、安装Elasticsearch head界面

Elasticsearch head的github页面为:https://github.com/mobz/elasticsearch-head

这里我在ES1上安装Elasticsearch head组件,事先git,然后复制下载相应的仓库进行安装启动:

[root@ES1 src]# git clone https://github.com/mobz/elasticsearch-head.git
[root@ES1 src]# cd elasticsearch-head
[root@ES1 elasticsearch-head]# npm config set strict-ssl false    #强制使用http连接
[root@ES1 elasticsearch-head]# npm install      #npm命令来源于epel仓库
[root@ES1 elasticsearch-head]# nohup npm rum start &    #在后台运行npm脚本

启动完成后,访问http://192.168.0.91:9100应能查看到下述界面:


elasticsearch head 界面

此界面可用于查看集群的索引、分片等状态及进行一系列的查询操作。
另外为了能让elasticsearch head插件能够正常连接上elasticsearch,需要在elasticsearch的配置文件中添加下述配置:

[root@ES1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

最后重启elasticsearch服务器即可。

连接查看elastic状态

二、搭建Logstash服务

1、安装logstash服务

#事先下载好相应的logstash安装包和jdk包
[root@logstash ~]# cd /usr/local/src/
[root@logstash src]# ll 
total 322800
-rw-r--r--. 1 root root 185646832 Jul 22 20:25 jdk-8u181-linux-x64.tar.gz
-rw-r--r--. 1 root root 144898446 Jul 22 20:25 logstash-6.3.1.rpm

#按照此前描述的方式安装jdk服务,确保能够正常运行java -version命令
#然后安装logstash 的rpm包
[root@logstash src]# rpm -ivh logstash-6.3.1.rpm 
warning: logstash-6.3.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                ########################################### [100%]
   1:logstash               ########################################### [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash

2、配置启动logstash

为了使用logstash,需要创建logstash的配置文件,配置文件中会指定使用的插件及每个插件的位置。logstash的配置文件主要分为三部分:input、output及filter。创建完成logstash的配置文件后就可以启动logstash了。

#修改用户logstash的shell为/bin/bash,以便切换登录
[root@logstash src]# usermod logstash -s /bin/bash

#在/etc/logstash/conf.d/ 目录下创建配置文件logstashtest.conf
[root@logstash src]# vim /etc/logstash/conf.d/logstashtest.conf
input {        #配置两个输入源,一个位filebeat,一个位标准输入
        beats {          
                host => '0.0.0.0'
                port => 5044
        }
        stdin {    
                type => "stdandardinput"
        }

}

output {        #配置两个输出源,一个是elasticsearch集群、一个是标准输出
        elasticsearch {
                hosts => ["192.168.0.91:9200","192.168.0.92:9200","192.168.0.93:9200"]
                index => ["logstash-nginxaccesslog"]
        }
        stdout {
                codec => "rubydebug"
        }
}

#切换到logstash用户
[root@logstash src]# su - logstash
#检查logstash配置文件
-bash-4.1$ /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -t -f /etc/logstash/conf.d/logstashtest.conf
....
Configuration OK        #如果出现Configuration OK 信息,则说明配置没问题,可尝试启动logstash

#启动logstash服务
-bash-4.1$ /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/logstashtest.conf       #此方式启动logstash,logstash会运行在前台,可通过添加nohup...&的方式来使其运行为后台进程
hello logstash        #通过在标准输入输入此消息,若能获取下述类似消息,说明logstash运行正常。
{
    "@timestamp" => 2018-07-22T13:01:02.381Z,
          "host" => "0.0.0.0",
          "type" => "stdandardinput",
      "@version" => "1",
       "message" => "hello logstash"
}

本文使用的安装方法在安装完logstash后,不会自动创建生成logstash的init文件,但是logstash提供了一个程序来让管理员手动创建init文件:

#确保在/usr/bin/java 链接到相应的java目录下的java程序
[root@logstash src]# ln -sv /usr/local/jdk/bin/java /usr/bin/java

#调用logstash提供的system-install 和 startup.options文件来创建logstash的init文件,其中Centos 7使用参数systemd,Centos6 使用sysv
[root@logstash src]# /usr/share/logstash/bin/system-install /etc/logstash/startup.options sysv
#创建完成后即可使用service 或systemctl命令来管理启动logstash

在logstash的配置文件中还可以配置filter进行日志过滤,本文暂不介绍。

三、搭建filebeat服务

1、在指定的nginx服务器上安装filebeat服务

[root@web ~]# cd /usr/local/src/
[root@web src]# ll
total 12500
-rw-r--r--. 1 root root 12799471 Jul 22 21:13 filebeat-6.3.1-x86_64.rpm

2、配置filebeat配置文件抓取nginx的访问日志


[root@web src]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
     - /var/log/nginx/*.log      #抓取nginx日志
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
output.logstash:
  hosts: ["192.168.0.94:5044"]    #将抓取的日志发送的logstash指定的IP和接口

最后启动filebeat服务即可

[root@web src]# service filebeat start

四、搭建kibana

在ES1服务器上安装kibana服务,展示elasticsearch收集到的日志索引。

[root@ES1 ~]# cd /usr/local/src/
[root@ES1 src]# rpm -ivh kibana-6.3.1-x86_64.rpm 

#修改kiban配置文件
[root@ES1 src]# vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "192.168.0.91"
server.name: "elk1"
elasticsearch.url: "http://192.168.0.91:9200"

#启动kibana
[root@ES1 src]# service kibana start

启动完成后访问http://192.168.0.91:5601端口即可访问相应的kibana界面。


Kibana界面

从上述可看到,kibana已经识别到我们此前配置的索引了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容