ELK 5.1部署

ELK已经升级到6了,希望使用6的同学,可以查看Ken同学的这篇文章

参考:
ELK部署详解
centos7虚拟机安装elasticsearch5.0.x-安装篇
logstash-best-practice-cn
官网

0 前言

本文主要是基于参考第一篇ELK部署详解所写。另起一篇的目的主要是ELK目前已更新到5.1,原文的一些地方需要改动;而是正如作者所言,ELK的部署文章非常少,而更新到5.1的更是少,正是作者的无私奉献,自己才能很快完成绝大部分的部署。故也将自己的部署过程结合发布,尽量记录成all in one,希望能够帮助到以后的童鞋部署。

服务器环境:

  • 主机:2(elk1, elk2)
  • 系统:CentOS7 Ubuntu 16.04
  • 配置:1c2g
  • 网络: 互通(elk1-192.168.204.133, elk2-192.168.204.129)
  • ELK版本:elasticsearch-5.1 kibana-5.1 logstash-5.1 logstash-forwarder-0.4.0 redis-3.2

1 安装

1.1 java1.8安装

注意java1.8是必须安装的版本选择正确的版本,CentOS7和Ubuntu16.04都是64位,如果是老版本的操作系统,注意查下操作系统的位数,然后下载对应的jdk。下载地址
0) 安装前如果是centos的话,需要先删掉对应open-jdk。
1) 对于Centos可以使用rpm下载进行安装。(提示:wget会很慢,可以用下载工具或者去CSDN下载)
2)Ubuntu的话,没有deb直接安装,但使用tar安装发现更简单:

  • 下载后,解压,比如jdk-8u111-linux-x64.tar.gz:
    tar -zvxf jdk-8u111-linux-x64.tar.gz
  • 移动目录,比如/usr/java(**如果不是root用户,需使用sudo执行。同时所有的安装最好不要直接使用root用户 **):
    mv jdk1.8.0_111 /usr/java/
  • 修改/usr/java目录权限(之后的elasticsearch和logstash会放在这个路径下,原因后续说明)
    sudo chgrp -R YourUsername /usr/java/
    sudo chown -R YourUsername /usr/java
  • 配置环境变量:
    CentOS7(使用tar包安装):比如使用bash,vim ~/.bash_profile
    export JAVA_HOME=/usr/java/jdk1.8.0_111 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    Ubuntu16.04:vim ~/.profile
    export JAVA_HOME=/usr/java/jdk1.8.0_111 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    (修改完注意登出,或者使用source 配置文件生效)
  • 测试java版本:
    java -version
成功截图

1.2 安装elasticsearch

本次安装是两台,elk1作为主节点,elk2为从节点。
如果是新手,建议下载TAR或者ZIP,然后mv/usr/java(原因是如果直接系统起,你发现启动了,但是好像不能访问啊。。。我最开始拿的CentOS7安装rpm,发现elasticsearch和logstash都不好使。而TAR启动的是bin下的可执行文件,即使出现错误,也会有一些提示信息;另外,这种方式,配置文件都在路径下,所以很方便修改配置;而在/etc下,很容易改错位置,也不易记住)
es下载地址
下载完依次:
1) 解压,并移至/usr/java/
unzip elasticsearch-5.1.1.zip
mv elasticsearch-5.1.1 /usr/java
2) 进入/usr/java/elasticsearch-5.1.1,在config路径下编辑elasticsearch.yml(配置是yml文件,不是elasticsearch.conf):
主节点的配置:

node.name: elk-node-1
network.host: elk1
node.master: true
discovery.zen.ping.unicast.hosts: ["elk1", "elk2"]

(注意:node.name只是一个逻辑名称,两台不一样即可;如果也想像上面network.host是一个逻辑名字,请在hosts文件进行配置才能使用;否则,请老老实实写本机IP)
从节点的配置:

node.name: elk-node-2
network.host: elk2
node.master: false
discovery.zen.ping.unicast.hosts: ["elk1", "elk2"]

(题外:我稍微看了下官方doc,其实默认node.master的true,在es集群启动的时候,第一台作为主节点,来进行自动管理。)
3)启动elasticsearch:
cd /usr/java/elasticsearch-5.1.1 ./bin/elasticsearch
4)如果不设置,第一次会报一些错误,见参考[centos7虚拟机安装elasticsearch5.0.x-安装篇](呵呵,RPM就不会这么直接了。所以到这里,希望能理解为什么直接用tar或者zip直接安装。还是讲清楚场景,自己开发调试这么可以,生产环境还是要做好系统启动的配置):

  • vm.max_map_count需要调大:
    临时修改vm.max_map_count: sudo sysctl -w vm.max_map_count=262144
    永久:sudo 编辑 /etc/sysctl.conf,增加vm.max_map_count=262144
  • 修改JVM内存(默认2g,我改为1g),sudo vim /usr/java/elasticsearch/config/jvm.options
    -Xms1g -Xmx1g
  • 应用打开文件数不够大:vim /etc/security/limits.conf
    YourUsername hard nofile 65536 YourUsername soft nofile 65536
    重新按照3)启动elasticsearch
    如果启动发现正常,但是curl测试不通(默认es端口是9200),可能是:
    ① 有可能network.host配置的是127.0.0.1,官方有解释道这样的话es只监听接收本地的9200端口,如果只是单机,可以修改为0.0.0.0,则可监听本地所有地址的请求。
    ② 如果是虚机,而且是VirtualBox的话,注意开下防火墙,不然主机即使映射,也没办法联通。
    5)检测是否启动成功的方法
    ① 检测是否可以访问:curl -XGET 'elk1:9200/?pretty' ,成功返回:
{
  "name" : "elk-node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "fU1cY9L2RGO_QHbDNj_Q3A",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}

② 检测系统状态:curl -XGET 'elk1:9200/_cat/health?v&pretty'

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1483811310 01:48:30  elasticsearch green           2         2     12   6    0    0        0             0                  -                100.0%

③ 检测单一节点状态:curl -XGET 'elk1:9200/_cat/nodes?v&pretty'

ip              heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.204.133            9          85   9    0.03    0.08     0.06 mdi       *      elk-node-1
192.168.204.129            9          96   0    0.00    0.00     0.00 di        -      elk-node-2

启动的日志可以在/usr/java/elasticsearch-5.1.1/logs下查看

1.3 Kibana安装

下载地址
1) Kibana我只安装单机,直接使用yum 安装rpm包
2)配置:可以参考配置以下(技巧:如果和默认配置一致,则那项内容可以不进行配置。比如我实际只配置了下面的elasticsearch.url和server.host参数):

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://elk1:9200"

1.4 redis安装

① redis由于我已安装,我觉得tar包下载再安装比较麻烦,而我直接使用yum和apt-get进行安装:
CentOS7:可以从rpmfind下载redis3的包redis-3.2.6-1.el7.remi.x86_64.rpm
Ubuntu16.04:sudo apt-get install redis-server
② 然后启动redis, sudo service redis start
③检查:redis-cli是否连通本地server

1.5 安装logstash

这个图必须说一下,因为看文档你会经常看到logstash pipline,具体这个是什么,这个图一看就明白:

Paste_Image.png

下载地址
下载完依次:
1) 老样子,解压并mv/usr/java下
2) 为logstash-forwarder进行免密配置:
vim /etc/pki/tls/openssl.cnf:
# 这块如果是多个,可以写成IP1:xxx, IP2:xxx...;注意是在[ v3_ca ]的后面编辑,而不是其他位置 subjectAltName = IP: 127.0.0.1
②生成证书:
$cd /etc/pki/tls $sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
如果在后面的logstash-forwarder报错:Failed to tls handshake with 127.0.0.1 x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs,一定注意回去检查①中的IP配置是否写在[ v3_ca ]
③如果logstash和logstash-forwarder不是一台机器,需要将生产的证书从logstash拷贝到logstash-forwarder的机器上:

scp private/logstash-forwarder.key root@target_server_ip:/etc/pki/tls/private
scp certs/logstash-forwarder.crt root@target_server_ip:/etc/pki/tls/certs

3)修改config配置,这里多说一句,其实配置就是和上图一一对应的,需要三部分INPUT、FILTER和OUTPUT。刚开始FILTER筛选可以忽略。
此外,[ELK]部署详解原文,配置了两个,其实相当于上图串行了两个logstash pipline。(千万不要认为redis-input是input,redis-out是output,其实他们每一个都是一个logstash pipeline)先从logstash-forwarder到redis,然后redis再到elasticsearch。这个部分我配置出错了好几次,千万注意括号的对应关系(vim可以用shift+%来找到对应的配置)上一份我的配置:
cd /usr/java/logstash-5.1.1/
config/redis-input.yml

input {
  lumberjack {
    port => 5043
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}
filter{
}

output {
    redis {
        host => "127.0.0.1"
        port => 6379
        data_type => "list"
        key => "logstash:redis"
    }
}

config/redis-output.yml

input {
    redis {
        data_type => "list"
        key => "logstash:redis"
        host => "127.0.0.1"
        port => 6379
    }
}
filter{
}
output {
    elasticsearch {
        hosts => ["elk1:9200"]
        index => "%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        # workers => 100 出错,说不支持,暂时先去掉
        template_overwrite => true
    }
}

4) 所以如果你直接配置完两个,无法启动,可以依次进行启动:
cd /usr/java/logstash-5.1.1 ./bin/logstash -f config/redis-input.yml ./bin/logstash -f config/redis-output.yml
5)在[ELK]部署一节,提到自己的脚本。你可以在logstash-5.1.1的bin目录新建一个sh脚本文件,比如mylogstash.sh:

  • 修改文件conf()函数的配置:
function conf()
{
    script_name="logstash"
    start_command=/usr/java/logstash-5.1.1/bin/logstash
    conf_file=/usr/java/logstash-5.1.1/config/redis-input.yml
    output_conf=/usr/java/logstash-5.1.1/config/redis-output.yml
    log_path=/usr/java/logstash-5.1.1/logs/logstash_output.log

    log_input_path=/usr/java/logstash-5.1.1/logs/logstash_input.log

    works=2
}
  • 赋予执行权限chmod u+x mylogstash.sh,然后就可以用比如path/to/logstash/bin/mylogstash.sh [start|stop|...]进行一键操作
    6)而外,如果配置完理解的话,发现logstash重要的是配置input、output(filter其实也很常用),在logstash中称为plugins,可以在官方logstash的doc右侧目录,查找input output filter进行查询。

1.6 logstash-forwarder

为什么要用Logstash Forwarder呢?看过logstash-best-practice-cn这节就明白是为了增加安全性。
1) 下载相关
官方的默认都下载链接到logstash,所以需要github看方法进行安装。
2) 配置:看配置是用于文件的监控,以下是监控logstash和nginx的日志:
/etc/logstash-forwarder.conf

{
  # The network section covers network configuration :)
  "network": {
    # A list of downstream servers listening for our messages.
    # logstash-forwarder will pick one at random and only switch if
    # the selected one appears to be dead or unresponsive
    "servers": [ "127.0.0.1:5043" ],

    # The path to your client ssl certificate (optional)
    #"ssl certificate": "./logstash-forwarder.crt",
    #"ssl certificate": "/etc/pki/tls/certs/logstash-forwarder.crt",
    # The path to your client ssl key (optional)
    "ssl key": "/etc/pki/tls/private/logstash-forwarder.key",

    # The path to your trusted ssl CA file. This is used
    # to authenticate your downstream server.
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",

    # Network timeout in seconds. This is most important for
    # logstash-forwarder determining whether to stop waiting for an
    # acknowledgement from the downstream server. If an timeout is reached,
    # logstash-forwarder will assume the connection or server is bad and
    # will connect to a server chosen at random from the servers list.
    "timeout": 15
  },

  # The list of files configurations
  "files": [
    # An array of hashes. Each hash tells what paths to watch and
    # what fields to annotate on events from those paths.
    {
      "paths": [ "/var/log/message.log"],
      "fields": { "type": "logstash" }
    },
    {
      "paths": [ "/var/log/nginx/access.log"],
      "fields": { "type": "web1_nginx" }
    }
    #{
      #"paths": [
        # single paths are fine
        #"/var/log/messages",
        # globs are fine too, they will be periodically evaluated
        # to see if any new files match the wildcard.
        #"/var/log/*.log"
      #],

      # A dictionary of fields to annotate on each event.
      #"fields": { "type": "syslog" }
    #}, {
      # A path of "-" means stdin.
      #"paths": [ "-" ],
      #"fields": { "type": "stdin" }
    #}, {
      #"paths": [
        #"/var/log/apache/httpd-*.log"
      #],
      #"fields": { "type": "apache" }
    #}
  ]
}

3) 启动(我是在CentOS上使用,所以使用sudo service logstash-forwarder start
4)题外:看官方推荐使用的叫beats,看配置和forwarder非常像,所以有兴趣可以研究下。

1.7 nginx的安装配置

这个按照[ELK部署详解]原文的安装并配置nginx用于HTTP访问进行配置即可。

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

推荐阅读更多精彩内容