ELK安装配置&使用入门

3,461 阅读5分钟

架构

elk比较常见的架构:

本文用的架构:

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。(可以关注下beats,有替代logstash shipper的趋势) 一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。 Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

为什么用到ELK 一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。 一个完整的集中式日志系统,需要包含以下几个主要特点: ①收集-能够采集多种来源的日志数据 ②传输-能够稳定的把日志数据传输到中央系统 ③存储-如何存储日志数据 ④分析-可以支持 UI 分析 ⑤警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

安装

网上很多关于elk介绍的例子都是基于老版本介绍的,最新版本的elk的安装和老版本有些区别,下面的安装步骤都是基于最新版本的es、logstash、kibana基于centos6.3安装。 网上安装jdk的介绍很多,这里不做介绍(安装jdk1.8,不然后续启动最新的es、kibana会报错)

安装配置logstash

mkdir -p /home/disk2/log/elk
cd /home/disk2/log/elk
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.4.0.zip (如机器没外网访问权限可先下载到本地再传到服务器,下同)
unzip logstash-5.4.0.zip
#修改logstash配置
cd logstash-5.4.0/config
vim logstash.yml
修改pipeline.workers为当前cpu数量

安装配置es

cd /home/disk2/log/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.zip
unzip elasticsearch-5.4.0.zip
#配置
cd elasticsearch-5.4.0/config
vim elasticsearch.yml
#修改如下内容
cluster.name: log
node.name: node-1
path.data: /home/disk2/log/elk/elasticsearch-5.4.0/data
path.logs: /home/disk2/log/elk/elasticsearch-5.4.0/logs
network.host: you.website.com
http.port: 8000# 默认9200端口 
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.system_call_filter: false#重要,centos6需添加此行配置
#修改系统配置
vim /etc/security/limits.conf
添加配置:
work soft nofile 65536
work hard nofile 65536
work soft memlock unlimited
work hard memlock unlimited
vim /etc/sysctl.conf
添加配置
vm.max_map_count = 262144
执行sysctl -p
vim /etc/security/limits.d/90-nproc.conf
添加配置
work          soft    nproc     65535

安装配置elasticsearch-head插件

#安装nodejs、xz
yum install xz
yum install nodejs
#此时执行npm -v查看npm是否安装,不出意外已经安装好了
#下载elasticsearch-head
#下载地址:https://github.com/mobz/elasticsearch-head,下载后解压缩。
#进入elasticsearch-head目录执行
使用npm安装grunt:
npm install grunt
npm install –g grunt–cli
npm安装依赖:
到elasticsearch-head-master目录下,运行命令:
npm install
如果速度较慢或者安装失败,可以使用国内镜像:
npm install -g cnpm --registry=https://registry.npm.taobao.org
#修改Gruntfile.js(通过8100端口访问es head)
connect: {
            server: {   
                options: {      
                    hostname: 'you.website.com',
                    port: 8100,
                    base: '.',          
                    keepalive: true     
                }               
            }           
}
#修改_site/app.js,修改连接es的地址
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://you.website.com:8000";
启动:
node_modules/grunt/bin/grunt server &
#浏览器访问http://you.website.com:8100/
#可参考http://blog.csdn.net/napoay/article/details/53896348

安装配置kibana

cd /home/disk2/log/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-linux-x86_64.tar.gz
tar -zvxf kibana-5.4.0-linux-x86_64.tar.gz
mv kibana-5.4.0-linux-x86_64 kibana-5.4.0
#修改配置
cd kibana-5.4.0/config
vim kibana.yml
修改如下配置:
server.port: 8100
server.host: "you.website.com"
elasticsearch.url: "http://you.website.com:8000"

使用

配置logstash

假如日志已经汇总到了一台机器,并且通过shell脚本进行了指定格式切分(可以使用logstash gork正则匹配字段,但网上说效率很低,待确认),这里采用dissect过滤,关于logstash的filter可以进一步研究下

在logstash下创建conf.d目录
vim bpslog.conf
添加如下配置(本配置包括了filter:dessect,输出到es,es配置自定义模板):
input
{
    file {
        path => ["/home/disk2/log/orp/formatedlog/bpslog/*/*.log"]
        type => "bpslog"
        start_position => "beginning"
    }
    file {
        path => ["/home/disk2/log/orp/formatedlog/manhattan/*/*.log"]
        type => "manhattanlog"
        start_position => "beginning"
        }
}
filter {
    if ([message] == "") {
            drop {}
    }
    if [type] == "bpslog" { 
            dissect {
                    mapping => {
                            "message" => "%{app}mysplit%{bid}mysplit%{opcode}mysplit%{uri}mysplit%{logId}mysplit%{logtime}mysplit%{bps}"
                    }
            }
    }
    else if [type] == "manhattanlog" {
            dissect {
                    mapping => {
                            "message" => "%{app}mysplit%{bid}mysplit%{uri}mysplit%{logId}mysplit%{logtime}mysplit%{raldata}"
                    }
            }   
    }   
}
output{
    if [type] == "bpslog" { 
            elasticsearch {
                    hosts => ["you.website.com:8201"]
                    index => "%{type}-%{+YYYY.MM.dd}"
                    template_overwrite => true
                    template => "/home/disk2/log/elk/logstash-5.4.0/template/bps.json"
            }  
    }
    else if [type] == "manhattanlog" {
            elasticsearch {
                    hosts => ["you.website.com:8000"]
                    index => "%{type}-%{+YYYY.MM.dd}"
                    template_overwrite => true
                    template => "/home/disk2/log/elk/logstash-5.4.0/template/manhattan.json"
            }
    }
    stdout{codec=>rubydebug}
}

自定义模板配置

{  
  "bps" : {  
      "template": "bpslog-*",  
        "settings": {  
        },  
    "mappings" : {  
      "logs" : {  
        "properties" : {  
          "@timestamp" : {  
            "type" : "date",  
            "format" : "dateOptionalTime",  
            "doc_values" : true  
          },  
          "@version" : {  
            "type" : "string",  
            "index" : "not_analyzed", #不分词 
          },  
          "app" : {  
            "type" : "string", 
        "index" : "not_analyzed", 
          },  
          "bid" : {  
            "type" : "integer",  
        "index" : "not_analyzed", 
          },  
          "opcode" : {  
            "type" : "integer",  
        "index" : "not_analyzed", 
          },  
          "uri" : {  
            "type" : "string", 
        "index" : "no", 
          }  
          "logId" : {  
            "type" : "integer",  
        "index" : "not_analyzed", 
          },  
          "logtime" : {  
            "type" : "string",  
        "index" : "not_analyzed", 
          },  
          "bps" : {  
            "type" : "string",  
        "index" : "no", 
          },  
        }  
      }  
    }  
  }  
} 

启动logstash

cd /home/disk2/log/elk/logstash-5.4.0/bin
./logstash -f ../conf.d &

启动es

cd /home/disk2/log/elk/elasticsearch-5.4.0/bin
./elasticsearch -d

使用kibana

kibana.logstash.es/content/kib…

安装X-pack插件

实践拓展

场景

1) datasource->logstash->elasticsearch->kibana

2) datasource->filebeat->logstash-> elasticsearch->kibana

3) datasource->filebeat->logstash->redis/kafka->logstash-> elasticsearch->kibana

4) kafka->logstash-> elasticsearch->kibana

5) datasource->filebeat->kafka->logstash->elasticsearch->kibana(最常用)

6) filebeatSSL加密传输

7) datasource->logstash->redis/kafka->logstash->elasticsearch->kibana

8) mysql->logstash->elasticsearch->kibana

www.cnblogs.com/qingqing746…