ELK Install


ELK 简介

[ Elasticsearch ](ES)是一个基于Lucene实现的开源、分布式、Restful的全文本搜索引擎;此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索;也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级的数据。
ES Cluster工作过程:
启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之建立通信。集群中的所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个均可接收并响应用户的各类请求。
集群有状态:green, red, yellow
[ Logstash ]:支持多数据获取机制,通过TCP/UDP协议、文件、syslog、windows EventLogs及STDIN等;获取到数据后,它支持对数据执行过滤、修改等操作;
[ Kibana ] : 数据可视化平台

架构图
这里写图片描述

环境准备

关闭防火墙,清空iptables规则,关闭Selinux

HostIPServer
node1.zyxasr.com192.168.1.106Elasticsearch, Kibana
node2.zyxasr.com192.168.1.104Logstash-Server
node3.zyxasr.com192.168.1.101Redis-Server
node4.zyxasr.com192.168.1.107Nginx-Server, Logstash-Agent
**准备nginx和logstash-agen端**

node4

准备epel源
yum install nginx
启动nginx
systemctl start nginx
下载logstash rpm安装包
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.rpm
准备jdk,最新的logstash任然并为支持jdk-10,所以我们使用openjdk-1.8
yum install java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64

创建logstash的运行文件
vim /etc/logstash/conf.d/sample.conf
#选择input plugin为file,导入nginx的日志文件
#输出output plugin为redis, redis服务器地址为192.168.1.107
input {
    file {
        path    => ["/var/log/nginx/access.log"]
        type    => "nginx"
        start_position => "beginning"
    }
}

output {
    if [type] == "nginx" {
        redis {
            host => ["192.168.1.101"]
            id => "My_Redis_Monitor"
            db => "1" 
            key => "nginx"
            data_type => ["list"]
        }
    }
}

准备Redis-Server

node3

下载redis
yum install redis
修改redis配置文件,使其对外部主机提供服务
sed -i  "/bind 127.0.0.1/c bind 0.0.0.0" /etc/redis.conf
启动redis
systemctl start redis

部署logstash-server

node2

安装jdk-1.8,以及logstash
编辑logstash的grok-pattern文件,为nginx提供解析

vim /usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/nginx
# nginx
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NOTSPACE:http_x_forwarded_for}


编辑logstash运行文件
vim /etc/logstash/conf.d/sample.conf

input {
    redis {
        host => ["192.168.1.107"]
        db => "1"
        data_type => ["list"]
        key => "nginx"
    }
}

filter {
    grok {
        match => { "messages" => "%{NGINXACCESS}" }
    }
}

output {
    elasticsearch {
        hosts => ["192.168.1.106:9200"]
        index => "redis_nginx-%{+YYYY.MM.dd}"
    }
}

配置elasticsearch和kibana

node1

安装jdk-1.8以及 elasticsearch和kibana
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-x86_64.rpm
安装elasticsearch和kibana
修改elasticsearch配置文件
vim /etc/elasticsearch/elasticsearch.yml
	cluster.name: My-ElasticSearch
	node.name: node1.zyxasr.com
	node.master: true
	network.host: 192.168.1.106
	http.port: 9200
启动elasticsearch
systemctl start elasticsearch 启动速度和主机性能有关,可以稍等片刻

修改kibana配置文件
vim /etc/kibana/kibana.yml
	elasticsearch.url: "http://192.168.1.106:9200"
启动kibana
systemctl start kibana
查看es和kibana监听端口
netstat -tnlp
tcp        0      0 192.168.1.106:5601      0.0.0.0:*               LISTEN      8485/node           
tcp6       0      0 192.168.1.106:9200      :::*                    LISTEN      8019/java           
tcp6       0      0 192.168.1.106:9300      :::*                    LISTEN      8019/java   

查看kibana的Dashboard

在Management 选择redis-nginx之后,打开Discover即可看到如下信息
这里写图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐