Elasticsearch、Logstash和Kibana简介与部署

ELK简介

ELK由Elasticsearch、Logstash和Kibana三部分组件组成。
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
简单来说,他是个全文搜索引擎,可以快速地储存、搜索和分析海量数据。
Elastic也可以理解为是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。以文档方式存储数据,和mangoDB类似。Elasticsearch、MongoDB和Hadoop比较 这篇文章将Elasticsearch和mongoDB做了比较,可以参考一下
Logstash是一个完全开源的工具,它可以把分散的、多样化的日志日志,或者是其他数据源的数据信息进行收集、分析、处理,并将其存储供以后使用。
kibana 是一个开源和免费的工具,它可以为Logstash和 ElasticSearch提供的日志分析友好的Web界面,可以帮助您汇总、分析和搜索重要数据日志。
其实,简单来说,ELK的核心是Elasticsearch,logstash和kibana都是为Elasticsearch服务的。使用logstash能够很方便的将其他来源的数据,比如:日志文件、数据库等方便的导入到Elasticsearch中。使用kibana可以直观清晰的展示Elasticsearch中存储的数据,生成图表,帮助分析,同时提供控制台来操作Elasticsearch。
所以说没有logstash和kibana,Elasticsearch也是能够正常使用的,只是用的没那么方便高效而已。

下载与部署

软件下载

我们可以从官网获取安装包。其实官网很棒,还有中文主页。官网的文档很容易理解,例子也很好实现。
elastic官网
Elasticsearch、logstash、kibana下载页面
历史版本下载页面Past Releases
在官网下载自己需要的版本即可,但是最好是三者的版本保持一致,Elasticsearch作为一个版本多,变化大的恢弘巨作,我认为是一群善变的程序员开发出来的。

部署环境

Mac(linux)、jdk1.8

Elasticsearch部署

解压之后,首先进行配置。配置文件路径:/config/elasticsearch.yml。
主要配置:
- cluster.name:集群名称,默认则会自动分配
- node.name是节点名称,默认则会自动分配
- http.port是访问端口,默认9200。

我的配置如下:

cluster.name: my-application
node.name: node-1

执行以下语句即可启动Elasticsearch。其中,-d是通过守护进程启动。

./bin/elasticsearch
./bin/elasticsearch -d

检测是否启动成功:

curl 'http://localhost:9200/?pretty'

或者直接在浏览器访问这个地址,就可以显示类似如下的返回结果:

{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "Q79rR5mCTICI7UfEcwmDnA",
  "version" : {
    "number" : "5.0.1",
    "build_hash" : "080bb47",
    "build_date" : "2016-11-11T22:08:49.812Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.1"
  },
  "tagline" : "You Know, for Search"
}

这样,我们的Elasticsearch就成功启动了。

kibana部署

解压kibana之后,首先进行配置。配置文件路径:config/kibana.yml
主要配置:

  • server.host:kibana的访问ip地址
  • server.port:kibana的访问端口,默认5601
  • elasticsearch.url:对应的Elasticsearch地址
  • kibana.index:kibana的index索引名

我的配置如下:

server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"
server.port: 5601

启动方式和Elasticsearch一样:

./bin/kibana

浏览器访问http://localhost:9200即可进入kibana首页。

logstash部署

解压logstash之后,首先进行配置(怎么还是这句话……)。哦不能首先配置,我们得先来了解一下logstash的工作原理和具体配置。

工作原理

Logstash使用管道方式进行日志的搜集处理和输出,从输入到输出,整个过程包括了三个阶段:输入input –> 处理filter(不是必须的) –> 输出output,每个阶段都可以选择很多的插件配合工作,比如file、elasticsearch、redis;也可以指定多种方式,比如输出到Elasticsearch或者输出控制台。

配置格式

配置格式要包括整个阶段的三部分,所以标准格式如下:

input {...} 
filter {...} 
output {...}

每一部分可以指定多个方式,比如输入要从控制台和数据库输入,按照如下配置:

input {
    stdin {

    }
    jdbc {
        ...
    }
}

输出如果是输出控制台或者Elasticsearch,按照如下配置:

output {
  elasticsearch {
  hosts => "localhost:9200"
  index => "mysql_accept"
  document_type => "accept"

  }
  stdout {
  codec => json_lines
  }
}

因为filter的配置不是必须的,所以这里暂时不表,等后续需要再讲解。

常用命令

-f指定Logstash的配置文件,根据配置文件配置logstash并进行启动:

./logstash -f logstash.conf

-e字符串当做配置启动,”“则默认控制台输入控制台输出

./logstash -e ""

-t测试配置文件是否正确并退出

./logstash -t logstash.conf
启动

上文已经讲解了logstash的基本配置以及启动命令。不过如果我们的logstash只是做从控制台输入再从控制台输出的工作实在是太没有意义了。一般的业务需求中,是需要将海量的数据从数据库中索引到Elasticsearch中的,所以这里主要介绍一下如何从MySQL和oracle将数据保存到Elasticsearch。Jdbc input plugin是官方文档对于jdbc插件的介绍,感兴趣的话可以看一看,毕竟官方文档是最权威的。
jdbc的input配置中,以下几项是比较重要的:

  • jdbc_driver_library:jdbc的依赖包路径
  • jdbc_driver_class:注册jdbc驱动。这里要注意!如果是MySQL则配置为”com.mysql.jdbc.Driver”,如果是oracle则配置为”Java::oracle.jdbc.driver.OracleDriver”(这里笔者找了半天的问题,后来发现官方文档里其实有写)
  • jdbc_connection_string:数据库连接
  • jdbc_user:数据库用户名
  • jdbc_password:数据库密码
  • schedule:定时服务配置,多长时间执行一次数据同步,格式为* * * * *,对应分 时 天 月 年。
  • statement:每次同步时的sql执行语句
  • statement_filepath:如果sql语句写在文件中,则在这里配置sql文件的路径

以下几项是增量更新的配置。logstash对于数据库的增两个更新有两种控制方式,一种是根据时间,一种是根据自增判断。执行完一次同步后,logstash会将最后同步的那条记录的时间或者自增值记录到文件中,下次同步时则从最新记录那里开始执行,记录值在sql语句中用:sql_last_value作为替代。
如果是用时间做控制,则sql语句这样写:

select * from tablename where update_time>:sql_last_value

如果不配置,则每次都会全量更新,这样比较浪费资源,所以建议配置:

  • last_run_metadata_path:记录最后更新值的保存路径。
  • use_column_value:true或者false。如果是true则使用自增值控制,false则使用时间控制。
  • tracking_column:选择控制增量更新的字段,对于上面的例子,这里配置成update_time

对于output到Elasticsearch的配置,最好是配置好数据索引到Elasticsearch的index、type和文档的id。下面是一个简单的配置:

output {
  elasticsearch {
  hosts => "localhost:9200"
  index => "my_index"
  document_type => "my_type"
  document_id => "%{id}"
  }
  stdout {
  codec => json_lines
  }
}

其中,index为同步数据时要保存到的索引,document_type为要保存到的type,document_id则配置保存成单个文档的id,%{id}中的id对应sql语句中的主键id字段名,同时数据也会输出到控制台。
下面是我的一个配置:

input {
  jdbc {
    jdbc_driver_library => "/Users/tinybye/Documents/elk/logstash-5.0.1/lib/mysql-connector-java-5.1.10-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/mysql_logstash"
    jdbc_user => "root"
    jdbc_password => "root"
    schedule => "* * * * *"
    statement => "SELECT id,name,age from person_table where update_time > :sql_last_value"
    last_run_metadata_path => "./logstash_jdbc_last_run"  
    use_column_value => false  
    tracking_column => "submit_time" 
  }
  jdbc {
    jdbc_driver_library => "/Users/tinybye/Documents/elk/logstash-5.0.1/lib/ojdbc6.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:test/test@//127.0.0.1:1521/orcl"
    jdbc_user => "test"
    jdbc_password => "test"
    schedule => "* * * * *"
    statement_filepath => "/Users/tinybye/Documents/elk/logstash-5.0.1/bin/logstash_sql/select.sql"
    last_run_metadata_path => "./logstash_jdbc_last_run_oracle"  
    use_column_value => false  
    tracking_column => "submit_time"
  }
}

# filter {

# }

output {
  elasticsearch {
  hosts => "localhost:9200"
  index => "mysql_logstash"
  document_type => "person"
  document_id => "%{id}"
  }
  stdout {
  codec => json_lines
  }
}

执行以下命令,就可以将数据同步到之前配置好的Elasticsearch中了:

./logstash -f logstash.conf

参考文章

ELK日志分析系统
Logstash使用详解
logstash-input-jdbc 同步原理及相关问题解读

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白码上飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值