III 26 ELK

III26 ELK

ELK(elasticsearch、logstash、kibana)

Elastic Stack是原ELK Stack在5.0版本加入Beats套件后的新称呼

解决痛点:

开发人员不能登录线上server查看详细日志;

各个系统都有日志,日志数据分散难以查找;

日志数据量大,查询速度慢,或数据不够实时;

一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据;

典型应用:

http://lucene.apache.org/

大多数电商的管理后台,搜索功能(搜订单、搜用户)都用lucene;

百科:

Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言);

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎;

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供,Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开源工具,就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库,人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆;

https://www.elastic.co/

elasticsearch(distributed,restful search and analytics);

kibana(visualize your data,navigate the stack);

beats(collect,parse,and ship in a lightweight fashion);

logstash(ingest,transform,enrich,and output);

es-hadoop(quickly query and get insight into ro your big data);

x-pack(security,alerting,monitoring,reporting,and graph in one pack);

elastic cloud(spin up hosted elasticsearch,kibana,and x-pack);

elastic cloud enterprise(manage a fleet of clusters on any infrastructure);

Plugins for Elastic Stack 1.x — 2.x:

shield(安全,protect your dataacross the Elastic Stack);

watcher(监控,get notifications about changes in your data);

marvel(管理,keep a pulse on the health of your Elastic Stack);

reporting(generate,schedule,and send reports of kibana visualizations);

graph(explore meaningful relationships in your data);

elasticsearch-1.7.0.tar.gz

logstash-1.5.3.tar.gz

kibana-4.1.1-linux-x64.tar.gz

日志收集系统:

scribe(facebook,C/C++);

chukwa(apache/yahoo,java);

kafka(linkedIn,scala);

flume(cloudera,java);

一、

ElasticSearch:

https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html

Search in Depth(开发)

Administration,Monitoring,and Deployment(运维)

[[email protected] ~]# cat /sys/block/sda/queue/scheduler   #(默认io scheduler是cfq,改为deadline或noop)

noop anticipatory deadline [cfq]

Elasticsearch是一个建立在全文搜索引擎ApacheLucene(TM)基础上的搜索引擎,可以说 Lucene是当今最先进,最高效的全功能开源搜索引擎框架;但是 Lucene 只是一个框架,要充分利用它的功能,你需要使用 JAVA,并且在你的程序中集成 Lucene,更糟的是,你需要做很多的学习了解,才能明白它是如何运行的,Lucene确实非常复杂;

Elasticsearch 使用 Lucene 作为内部引擎,但是在你使用它做全文搜索时,只需要使用统一开发好的API即可,而并不需要了解其背后复杂的Lucene的运行原理;当然Elasticsearch并不仅仅是Lucene那么简单,它不仅包括了全文搜索功能,还可以进行如下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索;实时分析的分布式搜索引擎,可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据;这么多的功能被集成到一台服务器上,你可以轻松地通过客户端或者任何你喜欢的程序语言与 ES 的 RESTful API 进行交流;

Elasticsearch 的上手是非常简单的,它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论,它安装好了就可以使用了,用很小的学习成本就可以变得很有生产力;随着学习的深入,你还可以使用 Elasticsearch 更多高级的功能,整个引擎可以很灵活地进行配置,你可以根据自身需求来定制属于你自己的 Elasticsearch;

相关术语:节点、集群、文档、索引、分片、备份分片(副本);

节点&集群(节点是elasticsearch运行的实例,集群是一组有着相同cluster.name的节点,它们协同工作,互相分享数据,提供了故障转移和扩展功能,另一个node也可以是一个cluster);

文档(程序中的对象很少是单纯的键值与数值的列表,更多的时候它拥有一个复杂的结构,比如包含了日期、地理位置、对象、数组等,迟早你会把这些对象存储在数据库中,你会试图将这些丰富而又庞大的数据都放到一个由行与列组成的关系数据库中,然后你不得不根据每个字段的格式来调整数据,然后每次重建它你都要检索一遍数据,Elasticsearch是面向文档型数据库,这意味着它存储的是整个对象或者文档,它不但会存储它们,还会为他们建立索引,这样你就可以搜索他们了,你可以在 Elasticsearch 中索引、搜索、排序和过滤这些文档,不需要成行成列的数据,这将会是完全不同的一种面对数据的思考方式,这也是为什么Elasticsearch可以执行复杂的全文搜索的原因;Elasticsearch使用JSON(或称作JavaScript Object Notation)作为文档序列化的格式,JSON 已经被大多数语言支持,也成为NoSQL领域的一个标准格式,它简单、简洁、易于阅读,可把JSON想象成一个用户对象,在 Elasticsearch 中,将对象转换为 JSON 并作为索引要比在表结构中做相同的事情简单多了,几乎所有的语言都有将任意数据转换、结构化成JSON,或者将对象转换为JSON的模块,查看serialization 以及marshalling两个JSON模块,The official Elasticsearch clients也可以帮你自动结构化 JSON);

索引(在Elasticsearch中,存储数据的行为就叫做索引(indexing),但是在我们索引数据前,我们需要决定将数据存储在哪里,Elasticsearch里,文档属于一种类型(type),各种各样的类型存在于一个索引中,你也可以通过类比传统的关系数据库得到一些大致的相似之处:

关系数据库  数据库表table  行row  列(Columns)

Elasticsearch  索引  类型  文档  字段(Fields)

一个Elasticsearch集群可以包含多个索引(数据库),也就是说其中包含了很多类型(table),这些类型中包含了很多的文档(row),然后每个文档中又包含了很多的字段(column));

注:

在Elasticsearch中,索引这个词汇已经被赋予了太多意义:

索引作为名词(一个索引就类似于传统关系型数据库中的数据库,这里就是存储相关文档的的地方);

索引作为动词(为一个文档创建索引是把一个文档存储到一个索引(名词)中的过程,这样它才能被检索,这个过程非常类似于SQL中的INSERT命令,如果已经存在文档,新的文档将会覆盖旧的文档);

反向索引(在关系数据库中的某列添加一个索引,比如多路搜索树(B-Tree)索引,就可以加速数据的取回速度,Elasticsearch以及Lucene使用的是一个叫做反向索引(inverted index)的结构来实现相同的功能,通常,每个文档中的字段都被创建了索引(拥有一个反向索引),因此他们可以被搜索,如果一个字段缺失了反向索引的话,它将不能被搜索);

与elasticsearch通信,取决于是否使用java:

java API(node client;transport client):如果使用java,elasticsearch内置了两个client,可在代码中使用;node client以一个无数据node的身份加入了一个集群,换句话说,它自身没有任何数据,但是它知道什么数据在集群中的哪一个node上,它可将请求转发到正确的node上进行连接;更加轻量的传输客户端可被用来向远程集群发送请求,它并不加入集群本身,而是把请求转发到集群中的node;两个client都使用elasticsearch的传输协议,通过9300port与java客户端进行通信,集群中的各个node也是通过9300port进行通信,如果此port被禁止,那这些node将不能组成一个cluster;java的客户端的版本号必须要与elasticsearch node所用的版本号一样,否则它们之间可能无法识别);

通过HTTP向RESTful API传送json,其它语言可通过9200port与elasticsearch的RESTful API进行通信,可使用curl命令与elasticsearch通信;

elasticsearch官方提供了很多种编程语言的客户端,也有和许多社区化软件的集成插件(javascript、.NET、php、perl、python、ruby);

#curl -X <VERB> ‘<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>‘ -d ‘<BODY>‘

VERB(http方法,GET、PUT、POST、HEAD、DELETE);

PROTOCOL(http or https,只有在elasticsearch前面有https代理的时候可用);

HOST(elasticsearch集群中任何一个node的主机名,本地为localhost);

PORT(elasticsearch http服务的端口,默认9200);

QUERY_STRING(可选,查询请求参数,例:?pretty,可生成更加美观易读的json反馈增强可读性);

BODY(json格式编码的请求主体);

举例:

[[email protected] ~]# curl -X GET ‘http://192.168.23.132:9200/_count?pretty‘ -d ‘

{

"query": {

"match_all": {}

}

}

{

"count" : 1,

"_shards" : {

"total" : 10,

"successful" : 10,

"failed" : 0

}

}

注(-I不能和-d同时使用,否则Warning: You can only select one HTTP request!;-I只读取http head,-d是用post提交表单):

-I(--head,(HTTP/FTP/FILE)  Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or FILE file, curl displays the file size and last modification time only.)

-X <command>(--request <command>,(HTTP)  Specifies  a custom request method to use when communicating with the HTTP server.  The specified request will be used instead of the method otherwise used (which  defaults to GET). Read the HTTP 1.1 specification for details and explanations. Common additional HTTP requests include PUT and DELETE, but related tech-nologies like WebDAV offers PROPFIND, COPY, MOVE and more. (FTP)Specifies a custom FTP command to use instead of LIST when doing file listswith FTP. If this option is used several times, the last one will be used.)

-d <data>(--data <data>,(HTTP)  Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form  and  presses the  submit  button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F/--form.)

elasticsearch安装前要有java环境

[[email protected] ~]# which java

/usr/bin/java

[[email protected] ~]# java -version

java version "1.5.0"

gij (GNU libgcj) version 4.4.7 20120313(Red Hat 4.4.7-17)

Copyright (C) 2007 Free Software Foundation,Inc.

This is free software; see the source forcopying conditions.  There is NO

warranty; not even for MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.

[[email protected] ~]# rpm -qa | grep java

java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64

libvirt-java-0.4.9-1.el6.noarch

libvirt-java-devel-0.4.9-1.el6.noarch

java_cup-0.10k-5.el6.x86_64

[[email protected] ~]# rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64

[[email protected] ~]# tar xf jdk-8u111-linux-x64.gz -C /usr/local/

[[email protected] ~]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/local/jdk1.8.0_111

export PATH=$PATH:$JAVA_HOME/bin

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

[[email protected] ~]# . !$

. /etc/profile.d/java.sh

[[email protected] ~]# java -version

java version "1.8.0_111"

Java(TM) SE Runtime Environment (build1.8.0_111-b14)

Java HotSpot(TM) 64-Bit Server VM (build25.111-b14, mixed mode)

[[email protected] ~]# tar xf elasticsearch-1.7.0.tar.gz -C /usr/local/

[[email protected] ~]# ln -sv /usr/local/elasticsearch-1.7.0/ /usr/local/elasticsearch

`/usr/local/elasticsearch‘ ->`/usr/local/elasticsearch-1.7.0/‘

[[email protected] ~]# ll /usr/local/elasticsearch/   #(config/{elasticsearch.yml,logging.yml},bin/elasticsearch)

total 40

drwxr-xr-x. 2 root root  4096 Dec 15 23:18 bin

drwxr-xr-x. 2 root root  4096 Dec 15 23:18 config

drwxr-xr-x. 3 root root  4096 Dec 15 23:18 lib

-rw-rw-r--. 1 root root 11358 Mar 23  2015 LICENSE.txt

-rw-rw-r--. 1 root root   150 Jun 9  2015 NOTICE.txt

-rw-rw-r--. 1 root root  8700 Jun 9  2015 README.textile

[[email protected] ~]# vim /usr/local/elasticsearch/config/elasticsearch.yml

################################### Cluster###################################

cluster.name: elasticsearch   #(LAN内的各node通过此名字标识在一个集群里,必须唯一,不能与其它集群名字相同)

#################################### Node#####################################

node.name: "test4"

node.master: true   #(该node能否被选举为主node)

node.data: true   #(该node能否存储数据)

#################################### Index####################################

index.number_of_shards: 5   #(分片)

index.number_of_replicas: 1   #(备份分片)

#################################### Paths####################################

path.conf: /usr/local/elasticsearch/conf/

path.data: /usr/local/elasticsearch/data/

path.work: /usr/local/elasticsearch/work/   #(临时文件)

path.logs: /usr/local/elasticsearch/logs/

path.plugins:/usr/local/elasticsearch/plugins/

################################### Memory####################################

bootstrap.mlockall: true   #(锁内存,不用swap)

############################## Network AndHTTP ###############################

#network.bind_host: 192.168.0.1

#network.publish_host: 192.168.0.1

#network.host: 192.168.0.1   #(相当于network.bind_host和network.publish_host,该node与其它node交互)

#transport.tcp.port: 9300

#http.port: 9200

############################# RecoveryThrottling #############################

#indices.recovery.max_bytes_per_sec: 20mb   #(设带宽)

##################################Discovery ##################################

#discovery.zen.ping.multicast.enabled:false   #(多播(组播))

#discovery.zen.ping.unicast.hosts:["host1", "host2:port"]  #(单播)

[[email protected] ~]#grep ‘^[a-z]‘ /usr/local/elasticsearch/config/elasticsearch.yml

cluster.name: elasticsearch

node.name: "test4"

node.master: true

node.data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path.conf: /usr/local/elasticsearch/conf/

path.data: /usr/local/elasticsearch/data/

path.work: /usr/local/elasticsearch/work/

path.logs: /usr/local/elasticsearch/logs/

path.plugins:/usr/local/elasticsearch/plugins/

bootstrap.mlockall: true

[[email protected] ~]# mkdir /usr/local/elasticsearch/{conf,data,work,logs,plugins}

[[email protected] ~]# /usr/local/elasticsearch-1.7.0/bin/elasticsearch -d   #(可加入参数,-Xms512m -Xmx512m)

log4j:WARN No appenders could be found forlogger (node).

log4j:WARN Please initialize the log4jsystem properly.

log4j:WARN Seehttp://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

[[email protected] ~]# netstat -tnulp | egrep ‘9200|9300‘

tcp       0      0 :::9200                     :::*                        LISTEN      7177/java

tcp       0      0 :::9300                     :::*                        LISTEN      7177/java

[[email protected] ~]# jps -lvm

7177org.elasticsearch.bootstrap.Elasticsearch -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly-XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8-Delasticsearch -Des.path.home=/usr/local/elasticsearch-1.7.0

7261 sun.tools.jps.Jps -lvm-Denv.class.path=.:/usr/local/jdk1.8.0_111/lib/dt.jar:/usr/local/jdk1.8.0_111/lib/tools.jar-Dapplication.home=/usr/local/jdk1.8.0_111 -Xms8m

http://192.168.23.132:9200/

安装elasticsearch-servicewrapper:

elasticsearch-servicewrapper这是对elasticsearch执行命令的包装服务,安装之后,方便elasticsearch的启动,停止等操作;

[[email protected] ~]# kill -9 7177

[[email protected] ~]# jps

7281 Jps

[[email protected] ~]# git clone https://github.com/elastic/elasticsearch-servicewrapper.git

Initialized empty Git repository in/root/elasticsearch-servicewrapper/.git/

remote: Counting objects: 184, done.

remote: Total 184 (delta 0), reused 0(delta 0), pack-reused 184

Receiving objects: 100% (184/184), 4.32 MiB| 278 KiB/s, done.

Resolving deltas: 100% (70/70), done.

[[email protected] ~]# mv elasticsearch-servicewrapper/service/ /usr/local/elasticsearch/bin/

[[email protected] ~]# /usr/local/elasticsearch/bin/service/elasticsearch --help

Unexpected command: --help

Usage:/usr/local/elasticsearch/bin/service/elasticsearch [ console | start | stop |restart | condrestart | status | install | remove | dump ]

Commands:

console      Launch in the currentconsole.

start        Start in thebackground as a daemon process.

stop         Stop if running as adaemon or in another console.

restart      Stop if running andthen start.

condrestart  Restart only ifalready running.

status       Query the currentstatus.

install      Install to start automatically whensystem boots.

remove       Uninstall.

dump         Request a Java threaddump if running.

[[email protected] ~]# /usr/local/elasticsearch/bin/service/elasticsearch install   #(install to startautomatically when system boots)

Detected RHEL or Fedora:

Installing the Elasticsearch daemon..

[[email protected] ~]# chkconfig --list elasticsearch

elasticsearch          0:off 1:off 2:on 3:on 4:on 5:on 6:off

[[email protected] ~]# vim /usr/local/elasticsearch/bin/service/elasticsearch.conf   #(通过此文件修改java环境配置等运行的一些信息,默认1024根据服务器配置更改,经验证此处至少512否则应用不能启动)

set.default.ES_HEAP_SIZE=512

[[email protected] ~]# /etc/init.d/elasticsearch start

Starting Elasticsearch...

Waiting for Elasticsearch.......

running: PID:7658

[[email protected] ~]# service elasticsearch status

Elasticsearch is running: PID:7658,Wrapper:STARTED, Java:STARTED

[[email protected] ~]# tail /usr/local/elasticsearch/logs/service.log

STATUS | wrapper  | 2016/12/16 00:55:23 | --> WrapperStarted as Daemon

STATUS | wrapper  | 2016/12/16 00:55:23 | Java Service WrapperCommunity Edition 64-bit 3.5.14

[[email protected] ~]# curl http://192.168.23.132:9200   #(200为正常)

{

"status" : 200,

"name" : "test4",

"cluster_name" : "elasticsearch",

"version" : {

"number" : "1.7.0",

"build_hash" :"929b9739cae115e73c346cb5f9a6f24ba735a743",

"build_timestamp" : "2015-07-16T14:31:07Z",

"build_snapshot" : false,

"lucene_version" : "4.10.4"

},

"tagline" : "You Know, for Search"

}

安装插件marvel:

marvel付费的监控管理工具,可使用其中的sense实现与elasticsearch友好交互;

Marvel is a management and monitoring tool for Elasticsearch which is free for development use. It comes with an interactive console called Sense which makes it very easy to talk to Elasticsearch directly from your browser. Many of the code examples in this book include a ``View in Sense‘‘ link. When clicked, it will open up a working example of the code in the Sense console. You do not have to install Marvel,but it will make this book much more interactive by allowing you to experiment with the code samples on your local Elasticsearch cluster.

注:

You probably don‘t want Marvel to monitor your local cluster, so you can disable data collection with this command:

#echo ‘marvel.agent.enabled: false‘ >> ./config/elasticsearch.yml

[[email protected] ~]# /usr/local/elasticsearch/bin/plugin -i elasticsearch/marvel/latest

-> Installingelasticsearch/marvel/latest...

Tryinghttp://download.elasticsearch.org/elasticsearch/marvel/marvel-latest.zip...

Downloading ................................................................................................................................................................................................................................................................................................DONE

Installed elasticsearch/marvel/latest into/usr/local/elasticsearch/plugins/marvel

http://192.168.23.132:9200/_plugin/marvel   #(点继续试用)

Dashboard-->Sense-->Get to work-->clickto send request

POST /index-demo/test

{

"user" : "jowin",

"message" : "hello,world"

}

GET /index-demo/test/AVkaOa61M5l9MXX2iExN   #(粘贴上一条执行结果中的"_id")

GET/index-demo/test/AVkaOa61M5l9MXX2iExN/_source  #(/_source只看文档内容)

GET /index-demo/test/_search?q=hello   #(全文搜索)

elasticsearch集群:

test4(192.168.23.132)

test5(192.168.23.133)

在另一node(test5)上安装elasticsearch、安装elasticsearch-servicewrapper;

test4:

[[email protected] ~]# /usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head   #(安装集群插件elasticsearch-head,管理集群)

-> Installing mobz/elasticsearch-head...

Tryinghttps://github.com/mobz/elasticsearch-head/archive/master.zip...

Downloading..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE

Installed mobz/elasticsearch-head into/usr/local/elasticsearch/plugins/head

http://192.168.23.132:9200/_plugin/head/

注:

.marvel-kibana为默认索引,一个索引5个分片;

集群健康值(green所有node都正常;yellow所有主分片正常,副本分片有丢失;red主分片有丢失);

[[email protected] ~]# curl-X GET ‘http://192.168.23.132:9200/_cluster/health?pretty‘

{

"cluster_name" : "elasticsearch",

"status" : "green",

"timed_out" : false,

"number_of_nodes" : 2,

"number_of_data_nodes" : 2,

"active_primary_shards" : 11,

"active_shards" : 22,

"relocating_shards" : 0,

"initializing_shards" : 0,

"unassigned_shards" : 0,

"delayed_unassigned_shards" : 0,

"number_of_pending_tasks" : 0,

"number_of_in_flight_fetch" : 0

}

二、

logstash

注:

https://www.elastic.co/guide/en/logstash/5.x/input-plugins.html   #(input plugin:beats、file)

https://www.elastic.co/guide/en/logstash/5.x/output-plugins.html   #(output plugins)

https://www.elastic.co/guide/en/logstash/5.x/filter-plugins.html   #(filter plugins)

https://www.elastic.co/guide/en/logstash/5.x/codec-plugins.html   #(codec plugins)

https://www.elastic.co/guide/en/logstash/5.x/configuration-file-structure.html

structure of a config file

----------------------file-start------------------------------

# This is a comment. You should usecomments to describe

# parts of your configuration.

input {

...

}

filter {

...

}

output {

...

}

------------------------file-end--------------------------------

value types:

array、lists、boolean、bytes、codec、hash、number、password、path、string、comments;

array(users => [ {id=> 1, name => bob}, {id => 2, name => jane} ]);

lists(

path => [ "/var/log/messages","/var/log/*.log" ]

uris => [ "http://elastic.co","http://example.net" ]

);

boolean(ssl_enable =>true);

bytes(

my_bytes => "1113"   # 1113 bytes

my_bytes => "10MiB"  # 10485760 bytes

my_bytes => "100kib" # 102400bytes

my_bytes => "180 mb" #180000000 bytes

);

codec(codec =>"json");

hash(

match => {

"field1" => "value1"

"field2" => "value2"

...

}

);

number(port => 33);

password(my_password =>"password");

uri(my_uri =>"http://foo:[email protected]");

path(my_path =>"/tmp/logstash");

string(

name => "Hello world"

name => ‘It\‘s a beautiful day‘

);

comments(

# this is a comment

input { # comments can appear at the end ofa line, too

#...

}

);

安装logstash前要有java环境;

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html#installing-logstash   #(生产环境建议yum方式安装)

https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm

https://download.elastic.co/logstash/logstash/packages/centos/logstash-1.5.3-1.noarch.rpm

二进制方式安装(logstash-1.5.3.tar.gz):

[[email protected] ~]# tar xf logstash-1.5.3.tar.gz -C /usr/local/

[[email protected] ~]# cd /usr/local

[[email protected] local]# ln -sv logstash-1.5.3/ logstash

`logstash‘ -> `logstash-1.5.3/‘

[[email protected] ~]# /usr/local/logstash/bin/logstash -e ‘input { stdin{} } output { stdout {} }‘   #(标准输入,标准输出)

hello

Logstash startup completed

2016-12-27T00:55:58.155Z test4 hello

world

2016-12-27T00:56:07.105Z test4 world

^CSIGINT received. Shutting down thepipeline. {:level=>:warn}

^CSIGINT received. Terminatingimmediately.. {:level=>:fatal}

[[email protected] ~]# /usr/local/logstash/bin/logstash -e ‘input { stdin{} } output { stdout { codec => rubydebug} }‘   #(rubydebug)

hello

Logstash startup completed

{

"message" => "hello",

"@version" => "1",

"@timestamp" => "2016-12-27T01:29:38.988Z",

"host" => "test4"

}

^CSIGINT received. Shutting down thepipeline. {:level=>:warn}

^CSIGINT received. Terminatingimmediately.. {:level=>:fatal}

[[email protected] ~]# /usr/local/logstash/bin/logstash -e ‘input { stdin {} } output { elasticsearch { host =>"192.168.23.132" protocol => "http" } }‘   #(输出到elasticsearch)

hello world

‘[DEPRECATED] use `require ‘concurrent‘`instead of `require ‘concurrent_ruby‘`

Logstash startup completed

http://192.168.23.132:9200/_plugin/head/

注:

粗黑框是主分片,其它是分片副本;

基本查询-->搜索(选logstash)-->点搜索   #(日志进了ES就可进行搜索)

[[email protected] ~]# /usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head   #(在192.168.23.133上安装管理集群插件)

二进制方式安装(logstash-1.5.3-1.noarch.rpm):

[[email protected] ~]# rm -rf /usr/local/logstash*

[[email protected] ~]# rpm -ivh logstash-1.5.3-1.noarch.rpm

Preparing...                ###########################################[100%]

1:logstash              ########################################### [100%]

[[email protected] ~]# vim /etc/init.d/logstash

LS_USER=logstash

LS_GROUP=logstash

LS_HOME=/var/lib/logstash

LS_HEAP_SIZE="128m"

LS_LOG_DIR=/var/log/logstash

LS_LOG_FILE="${LS_LOG_DIR}/$name.log"

LS_CONF_DIR=/etc/logstash/conf.d

LS_OPEN_FILES=16384

LS_NICE=19

LS_OPTS=""

[[email protected] ~]# vim /etc/logstash/conf.d/logstash.conf

input {

file {

path => "/tmp/messages"

}

}

output {

file {

path =>"/tmp/%{+YYYY-MM-dd}-messages.gz"

gzip => true

}

}

[[email protected] ~]# /etc/init.d/logstash start

logstash started.

[[email protected] ~]# /etc/init.d/logstash status

logstash is running

[[email protected] ~]# cat /var/log/maillog >> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# ll /tmp

total 196

-rw-r--r--. 1 logstash logstash   5887 Dec 28 19:28 2016-12-29-messages.gz

drwxr-xr-x. 2 logstash logstash   4096 Dec 28 19:27 hsperfdata_logstash

drwxr-xr-x. 2 root     root      4096 Dec 28 19:18 hsperfdata_root

drwxr-xr-x. 2 root     root      4096 Dec 26 17:54 jna-3506402

-rw-r--r--. 1 root     root    147340 Dec 28 19:28 messages

[[email protected] ~]# vim /etc/logstash/conf.d/logstash.conf

input {

file {

path =>"/tmp/messages"

}

}

output {

file {

path =>"/tmp/%{+YYYY-MM-dd}-messages.gz"

gzip => true

}

elasticsearch {

host =>"192.168.23.132"

protocol => "http"

index =>"system-messages-%{+YYYY.MM.dd}"

}

}

[[email protected] ~]# /etc/init.d/logstash restart

Killing logstash (pid 5921) with SIGTERM

Waiting logstash (pid 5921) to die...

Waiting logstash (pid 5921) to die...

logstash stopped.

logstash started.

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

http://192.168.23.132:9200/_plugin/head/

举例:

node1(test4,192.168.23.132,elasticsearch,logstash)

node2(test5,192.168.23.133,redis、elasticsearch,logstash)

前提:node1和node2是elasticsearch集群

datasource-->logstash-->redis-->logstash-->elasticsearch

(1)input(file)-->logstash-->output(redis)

(2)input(redis)-->logstash-->output(elasticsearch)

注:生产上一个业务用一个redis(0-15共16个库,默认0库),例如:db0给系统日志用,db1访问日志,db2错误日志,db3给mysql日志等

(1)

在test5(node2)上:

[[email protected] ~]# yum -y install redis

[[email protected] ~]# vim /etc/redis.conf

bind 192.168.23.133

[[email protected] ~]# /etc/init.d/redis start

Starting redis-server:                                     [  OK  ]

[[email protected] ~]# redis-cli -h 192.168.23.133 -p 6379

redis 192.168.23.133:6379> info

……

redis 192.168.23.133:6379> keys *

(empty list or set)

redis 192.168.23.133:6379> select 1

OK

redis 192.168.23.133:6379[1]> keys *

(empty list or set)

在test4(node1)上:

[[email protected] ~]# vim /etc/logstash/conf.d/logstash.conf   #(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html

input {

file {

path =>"/tmp/messages"

}

}

output {

redis {

data_type =>"list"

key =>"system-messages"

host =>"192.168.23.133"

port => "6379"

db => "1"

}

}

[[email protected] ~]# /etc/init.d/logstash restart

Killing logstash (pid 5986) with SIGTERM

Waiting logstash (pid 5986) to die...

Waiting logstash (pid 5986) to die...

logstash stopped.

logstash started.

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

在test5(node2)上查看:

redis 192.168.23.133:6379[1]> keys *

1) "system-messages"

redis 192.168.23.133:6379[1]> llen system-messages

(integer) 328

redis 192.168.23.133:6379[1]> lindex system-messages -1

"{\"message\":\"Dec 2819:06:17 test4 dhclient[4900]: bound to 192.168.23.132 -- renewal in 899seconds.\",\"@version\":\"1\",\"@timestamp\":\"2016-12-29T08:49:10.183Z\",\"host\":\"test4\",\"path\":\"/tmp/messages\"}"

(2)

在node2上安装logstash

[[email protected] ~]# java -version

java version "1.8.0_111"

Java(TM) SE Runtime Environment (build1.8.0_111-b14)

Java HotSpot(TM) 64-Bit Server VM (build25.111-b14, mixed mode)

[[email protected] ~]# rpm -ivh logstash-1.5.3-1.noarch.rpm

Preparing...               ########################################### [100%]

1:logstash              ########################################### [100%]

[[email protected] ~]# /etc/init.d/elasticsearchstatus

Elasticsearch is running: PID:4165,Wrapper:STARTED, Java:STARTED

[[email protected] ~]# vim /etc/init.d/logstash

LS_HEAP_SIZE="128m"

[[email protected] ~]# vim /etc/logstash/conf.d/logstash.conf

input {

redis {

data_type =>"list"

key =>"system-messages"

host =>"192.168.23.133"

port => "6379"

db => "1"

}

}

output {

elasticsearch {

host =>"192.168.23.133"

protocol => "http"

index =>"system-redis-messages-%{+YYYY.MM.dd}"

}

}

[[email protected] ~]# /etc/init.d/logstash start

logstash started.

在node1上导入数据:

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

[[email protected] ~]# cat /var/log/maillog>> /tmp/messages

在node2上查看redis中数据,已被elasticsearch拿走长度0:

redis 192.168.23.133:6379[1]> llen system-messages

(integer) 0

redis 192.168.23.133:6379[1]> llen system-messages

(integer) 0

redis 192.168.23.133:6379[1]> llen system-messages

(integer) 0

http://192.168.23.132:9200/_plugin/head/

时间: 2024-10-20 02:09:01

III 26 ELK的相关文章

&amp;lt;LeetCode OJ&amp;gt; 26 / 264 / 313 Ugly Number (I / II / III)

Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7. Note that 1 is ty

centos7搭建ELK Cluster集群日志分析平台(四):简单测试

续之前安装好的ELK集群 各主机:es-1 ~ es-3 :192.168.1.21/22/23 logstash: 192.168.1.24 kibana: 192.168.1.25 测试机:client: 192.168.1.26 在测试机上安装并启动filebeat 1. 下载filebeat  ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.0-linux-x86_64.tar.gz

集中式日志系统 ELK 协议栈详解

1.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 1.1.2 elasticsearch几个重要术语 NRT elasticsea

Get 80% off runescape gold online from RSorder 9.26 as DXP gift

Efter tid, har Maruti Swift vunnit terrng med action packade buy rs3 gold prestanda och bsta brnsle optimering. Och fr att effektivisera sin mekanism fr dess experter kommer med alla nya Maruti Swift med nya lder teknik fr frbttrat optimal brnslefrbr

利用 ELK系统分析Nginx日志并对数据进行可视化展示

一.写在前面 结合之前写的一篇文章:Centos7 之安装Logstash ELK stack 日志管理系统,上篇文章主要讲了监控软件的作用以及部署方法.而这篇文章介绍的是单独监控nginx 日志分析再进行可视化图形展示,并在用户前端使用nginx 来代理kibana的请求响应,访问权限方面暂时使用HTTP 基本认证加密用户登录.(关于elk权限控制,我所了解的还有一种方式-Shield),等以后有时间了去搞下.下面开始正文吧... 注意:环境默认和上一篇大致一样,默认安装好了E.L.K.3个软

[LintCode] Coins in a Line III

Coins in a Line III There are n coins in a line. Two players take turns to take a coin from one of the ends of the line until there are no more coins left. The player with the larger amount of money wins. Could you please decide the first player will

[LeetCode][JavaScript]Combination Sum III

Combination Sum III Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers. Ensure that numbers within the set are sorted in ascend

hdu 2064 汉诺塔III

汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11335    Accepted Submission(s): 5121 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右

【leetcode】Best Time to Buy and Sell Stock III

Best Time to Buy and Sell Stock III Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most two transactions. Note:You may not engage in multiple