博客是我工作的好帮手,遇到困难就来博客找资料
分类: 系统运维
2017-03-12 19:59:21
Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。
kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界
面。他可以为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面 。
1.Kibana介绍
Kibana是一个基于浏览器页面的Elasticsearch前端展示工具。Kibana全部使用HTML语言和Javascript编写的。
2.安装配置Kibana
wget
unzip kibana-3.1.2.zip
mv kibana-3.1.2/* /data/app_platform/kibana/
#配置样本
grep -v "#" /home/haoren/data/kibana-5.0.2-linux-x86_64/config/kibana.yml
server.port: 15601
server.host: "0.0.0.0"
elasticsearch.url: ""
配置Nginx虚拟机主机
/data/app_platform/nginx/conf/conf.d/kibana.conf
server
{
listen 80;
server_name kibana.xxxxx.com;
access_log /data/app_data/nginx/logs/kibana.log main;
client_max_body_size 5m;
index index.html index.htm;
autoindex on;
root /data/app_platform/kibana;
location / {
index index.html index.htm;
}
}
更改/data/app_platform/kibana/config.js中的Elasticsearch的配置信息
elasticsearch: "",
3.导入一些测试数据
在导入测试数据之前,创建一些索引。
$ curl -XPUT -d '
> {
> "mappings" : {
> "_default_" : {
> "properties" : {
> "speaker" : {"type": "string", "index" : "not_analyzed" },
> "play_name" : {"type": "string", "index" : "not_analyzed" },
> "line_id" : { "type" : "integer" },
> "speech_number" : { "type" : "integer" }
> }
> }
> }
> }
> ';
索引创建完后,导入测试数据
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
说到这里,我们看看 kibana 和 logstash到底能为我们做些什么呢?下面是kibana的界面
简单来讲他具体的工作流程就是 logstash agent 监控并过滤日志,将过滤后的日志内容发给redis(这里的redis只处理队列不做存储),logstash index将日志收集在一起交给
全文搜索服务ElasticSearch 可以用ElasticSearch进行自定义搜索 通过Kibana 来结合 自定义搜索进行页面展示,下图是 Kibana官网上的流程图
好了 让我们一步步的把这套环境搭建起来吧,先看看都需要安装什么软件包
#安装样本
rpm -qa |grep ruby
libselinux-ruby-2.0.94-5.3.el6.x86_64
ruby-irb-1.8.7.374-4.el6_6.x86_64
ruby-rdoc-1.8.7.374-4.el6_6.x86_64
ruby-libs-1.8.7.374-4.el6_6.x86_64
rubygems-1.3.7-5.el6.noarch
ruby-1.8.7.374-4.el6_6.x86_64
ruby 运行Kibana 必须,
rubygems 安装ruby扩展必须
bundler 功能类似于yum
JDK 运行java程序必须
redis 用来处理日志队列
logstash 收集、过滤日志
ElasticSearch 全文搜索服务(logstash集成了一个)
kibana 页面展示
这里有三台服务器
192.168.233.128 logstash index,ElasticSearch,kibana,JDK
192.168.233.129 logstash agent,JDK
192.168.233.130 redis
首先到 logstash index服务器上面,logstash分为 index和aget ,agent负责监控、过滤日志,index负责收集日志并将日志交给ElasticSearch 做搜索
此外 logstash 的收集方式分为 standalone 和 centralized。
standalone 是所有功能都在一个服务器上面,自发自收,
centralized 就是集中收集,一台服务器接收所有shipper(个人理解就是logstash agent)的日志。
其实 logstash本身不分 什么 shipper 和 collector ,只不过就是配置文件不同而已,我们这次按照集中的方式来测试
在 logstash index上安装基础的软件环境
[192.168.233.128 root@nodec:~]
# cd /soft/
[192.168.233.128 root@nodec:/soft]
# wget
从oracle下载实在是太慢了,从CU下载会快一些,如果需要最新版本请访问这里
[192.168.233.128 root@nodec:/soft]
# sh jdk-6u13-dlj-linux-i586.bin
输入yes 便开始安装了
安装完成后设置一下 JAVA_HOME
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# vim /etc/profile
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
安装ruby 就比较简单了(Kibana需要ruby 1.8.7以上版本)
[192.168.233.128 root@nodec:/soft]
# yum install ruby rubygems
..... 安装内容省略
安装完成后用 rubygems 来安装bundler
[192.168.233.128 root@nodec:/soft]
# /usr/bin/gem install bundler
.....
ok 这样基本的环境就已经有了,下面就是安装kibana 和 logstash
其实logstash 就是一个java脚本,不需要安装... 下载即用
[192.168.233.128 root@nodec:/soft]
# wget
现在看看 这个脚本应该怎么去执行
[192.168.233.128 root@nodec:/soft]
# java -jar /soft/logstash-1.1.0-monolithic.jar -h
No such command "-h"
Available commands:
-v
-V
--version
agent
web
test
显然没有 -h 参数,不过列出了能用的参数,但是logstash的参数可不止这些,
java -jar /soft/logstash-1.1.0-monolithic.jar agent --help
这些是在agent模式下的命令参数
-f, --config CONFIGFILE
Load the logstash config from a specific file, directory, or a wildcard. If given a directory or wildcard, config files will be read in order lexigraphically.
-e CONFIGSTRING
Use the given string as the configuration data. Same syntax as the config file. If not input is specified, 'stdin { type => stdin }' is default. If no output is specified, 'stdout { debug => true }}' is default.
-w, --filterworks COUNT
Run COUNT filter workers (default: 1)
--watchdog-timeout TIMEOUT
Set watchdog timeout value.
-l, --log FILE
Log to a given path. Default is to log to stdout
-v
Increase verbosity. There are multiple levels of verbosity available with '-vv' currently being the highest
--pluginpath PLUGIN_PATH
A colon-delimted path to find other logstash plugins in
java -jar /soft/logstash-1.1.0-monolithic.jar web --help
下面的是在web界面的参数
--log FILE
Log to a given path. Default is stdout.
--address ADDRESS
Address on which to start webserver. Default is 0.0.0.0.
--port PORT
Port on which to start webserver. Default is 9292.
-B, --elasticsearch-bind-host ADDRESS
Address on which to bind elastic search node.
-b, --backend URL
The backend URL to use. Default is elasticsearch:/// (assumes multicast discovery). You can specify elasticsearch://[host][:port]/[clustername]
如果上面的这些命令都能执行正常的话就表示 logstash可以使用了,但要让他启动还需要一个配置文件
[192.168.233.128 root@nodec:/soft]
# vim redis.conf
input {
redis {
host => '192.168.233.130'
data_type => 'list'
port => "6379"
key => 'logstash:redis'
type => 'redis-input'
}
}
output {
elasticsearch {
embedded => true
}
}
解释一下 logstash的配置文件由 input filter output 等几个基本的部分组成,
顾名思义 input 就是在那收集数据,output就是输出到哪,filter代表一个过滤规则意思是什么内容
会被收集。
上面这段是让 logstash 去192.168.233.130 这个redis服务器上去收集日志 redis端口为6379,key是 logstash:redis 类型为 redis-input ,(注意:这几个值必须跟logstash agent的output 所对应),
收集完成后输出到 elasticsearch ,embedded => true 的意思是使用logstash 内嵌的
elasticsearch。如果有独立的elasticsearch服务器,需要将 这条改为
host => 'elasticsearch的ip' port => 端口
好了,这个简单的配置文件可以让logstash开始启动了
[192.168.233.128 root@nodec:/soft]
# java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf -- web --backend elasticsearch:///?local &
[1] 5205
...这里要等待约5秒钟... 为什么?去问开发者吧
[192.168.233.128 root@nodec:/soft]
# I, [2013-03-19T03:23:10.749000 #5205] INFO -- : Using beta plugin 'redis'. For more information about plugin statuses, see {"timestamp":"2013-03-19T03:23:10.732000 -0700","message":"Using beta plugin 'redis'. For more information about plugin statuses, see ","level":"info"}
file:/soft/logstash-1.1.0-monolithic.jar!/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53 warning: already initialized constant WFKV_
Mizuno 0.5.0 (Jetty 8.0.y.z-SNAPSHOT) listening on 0.0.0.0:9292
解释一下 上面的命令 agent 代理模式 -f 指定配置文件 --web 其实是个分隔符等于又启动了一个命令,后面的参数就是开启一个web页面默认端口是9292,这个命令如果拆成两个就是这个样子
java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf &
java -jar /soft/logstash-1.1.0-monolithic.jar web --backend elasticsearch:///?local &
(其实如果用kibana来做web界面的话这一步完全可以省掉了)
好了,看到9292 端口启动就代表 启动成功了,检查一下
[192.168.233.128 root@nodec:/soft]
# lsof -i:9292
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 5205 root 465u IPv4 130805 TCP *:armtechdaemon (LISTEN)
其实logstash还启动了一个端口9200,因为启动了内嵌的 elasticsearch,这个9200是 elasticsearch在监听
[192.168.233.128 root@nodec:/soft]
# lsof -i:9200
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 5205 root 160u IPv4 130682 TCP *:wap-wsp (LISTEN)
现在可以通过浏览器访问一下 看看logstash是的页面是个什么样子
能搜索因为现在还没有数据,其实这个时候 也是可以访问的,
很多开发自己写代码来调用elasticsearch 来实现他们自己的需要,这里就不多说了
192.168.233.128 这台logstash index的操作暂时告一段落,下面开始配置logstash的agent
登录到 服务器 192.168.233.129 安装基本软件包和logstash
[192.168.233.129 root@noded:~]
# cd /soft/
[192.168.233.129 root@noded:/soft]
# wget
[192.168.233.129 root@noded:/soft]
# sh jdk-6u13-dlj-linux-i586.bin
设置 JAVA_HOME
[192.168.233.129 root@noded:/soft]
# vim /etc/profile
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
[192.168.233.129 root@noded:/soft]
# yum install ruby
192.168.233.129 root@noded:/soft]
# wget
[192.168.233.129 root@noded:/soft]
# vim redis.conf
input {
file {
type => "producer"
path => "/soft/apache.log"
}
file {
type => "php-log"
path => "/soft/php.log"
}
}
filter {
grep {
match => [ "@message", "mysql|GET|error" ]
}
}
output {
redis {
host => '192.168.233.130'
data_type => 'list'
key => 'logstash:redis'
}
}
大概说一下这个配置文件 input 里的file就是要监视的文件了 这里我监视了两个文件,如果这两个文件有追加的内容就会通过下面的output设置发给 redis服务器
filter 里的grep 意思就是 grep... 后面这段就是 日志内容里面只要有匹配 mysql或GET或error的内容就会被过滤出来,发送到 logstash index
以上就是一个比较简单的配置文件了,让我们启动他
[192.168.233.129 root@noded:/soft]
# java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf &
I, [2013-03-19T19:45:35.762000 #2721] INFO -- : Using beta plugin 'file'. For more information about plugin statuses, see {"timestamp":"2013-03-19T19:45:35.752000 -0700","message":"Using beta plugin 'file'. For more information about plugin statuses, see ","level":"info"}
I, [2013-03-19T19:45:35.778000 #2721] INFO -- : Using beta plugin 'file'. For more information about plugin statuses, see {"timestamp":"2013-03-19T19:45:35.778000 -0700","message":"Using beta plugin 'file'. For more information about plugin statuses, see ","level":"info"}
I, [2013-03-19T19:45:35.804000 #2721] INFO -- : Using beta plugin 'grep'. For more information about plugin statuses, see {"timestamp":"2013-03-19T19:45:35.803000 -0700","message":"Using beta plugin 'grep'. For more information about plugin statuses, see ","level":"info"}
I, [2013-03-19T19:45:35.854000 #2721] INFO -- : Using beta plugin 'redis'. For more information about plugin statuses, see {"timestamp":"2013-03-19T19:45:35.853000 -0700","message":"Using beta plugin 'redis'. For more information about plugin statuses, see ","level":"info"}
只要没有 warning 和 error就算是正常启动了
启动之前请确定 192.168.233.130的 redis服务器已经启动,不然会报错
下面登录到 192.168.233.130 上看看 redis服务的状态
[192.168.233.130 root@nodea:/data/redis/etc]
# lsof -i:6379
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
redis-ser 2732 root 4u IPv4 7946 TCP *:6379 (LISTEN)
redis-ser 2732 root 5u IPv4 7963 TCP localhost.localdomain:6379->localhost.localdomain:19214 (ESTABLISHED)
java 2733 root 9u IPv4 7959 TCP localhost.localdomain:19214->localhost.localdomain:6379 (ESTABLISHED)
状态正常,端口处于监听状态,我用的是最简单的 配置,
[192.168.233.130 root@nodea:/data/redis/etc]
# vim redis.conf
#this is the config file for redis
pidfile /var/run/redis.pid
port 6379
timeout 0
loglevel verbose
logfile /data/redis/log/redis.log
dbfilename dump.rdb
dir /data/redis/db/
vm-swap-file /tmp/redis.swap
activerehashing yes
启动命令如下
[192.168.233.130 root@nodea:/data/redis/etc]
# redis-server /data/redis/etc/redis.conf &
下载安装就比较简单了
[192.168.233.130 root@nodea:/soft]
# wget
[192.168.233.130 root@nodea:/data/redis/etc]
# make –j 24
[192.168.233.130 root@nodea:/data/redis/etc]
# make install
配置文件里的那几个路径要提前建好
最后我们回到 logstash agent 上面测试一下
[192.168.233.129 root@noded:/soft]
# echo GET12313 >> apache.log
[192.168.233.129 root@noded:/soft]
# echo errorabcd >> apache.log
ok 到 去搜索一下 刚才的两个内容
嗯,就是这样了,我现在找个php的错误日志给他追加到php.log文件里
[192.168.233.129 root@noded:/soft]
# cat php-error.log >> php.log
在看看 logstash的页面 搜索一下 error
OK,最后就是 Kibana了 ,我把Kibana装在了 logstash index上面
下载地址为
[192.168.233.128 root@nodec:/soft]
# tar xf Kibana-0.2.0.tar.gz
[192.168.233.128 root@nodec:/soft]
# cd Kibana-0.2.0
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# bundle install
直接安装就好了,非常简单,因为之前咱们已经安装好了 bundle
编辑配置文件,指定 elasticsearch 的位置
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# vim KibanaConfig.rb
.....
Elasticsearch = "localhost:9200"
KibanaPort = 5601
KibanaHost = '0.0.0.0'
.....
主要是这几个参数
启动的话需要ruby
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# /usr/bin/ruby kibana.rb &
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# == Sinatra/1.3.5 has taken the stage on 5601 for development with backup from Thin
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:5601, CTRL+C to stop
如果ruby的东西都不缺的话,启动会很顺利,ok 现在看看5601端口的状态
[192.168.233.128 root@nodec:/soft/Kibana-0.2.0]
# lsof -i:5601
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
ruby 3116 root 5u IPv4 28947 TCP *:esmagent (LISTEN)
访问一下 试试看 尝试搜索一下php的错误日志,比如mysql
ELK Stack 是Elasticsearch、Logstash、Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的。
可参考:
二、Elasticstack重要组件
Elasticsearch: 准实时索引
Logtash: 收集数据,配置使用 Ruby DSL
Kibana 展示数据,查询聚合,生成报表
Kafka 消息队列,做为日志接入的缓冲区
三、Elasticstack工作流程
简要说明:
1)日志机器上部署logstash服务,用于监控并收集日志,然后,将收集到的日志发送到broker上。
2)Indexer会将这些日志收集到一起,统一发送到Elasticsearch上进行存储。
3)最后Kibana会将需要的数据进行展示,可以进行自定义搜索
四、环境准备
系统:centos 7.2
JDK: 1.8.0_111
filebeat: 5.1.2
logstash: 5.1.2
elasticsearch: 5.1.2 (注:ELK stack 5.1以上版本JDK必须是1.8以上)
kibana: 5.1.2
X-Pack:5.1
kafka: 2.11-0.10.1.0
测试服务器准备:
主机名称:node01 IP:192.168.2.14 职责:主机节点以及数据节点、kafka/logstash
主机名称:node02 IP: 192.168.2.15 职责:主机节点以及数据节点、kibana
主机名称:node03 IP: 192.168.2.17 职责:主机节点以及数据节点、Elasticstack-head插件
主机名称:test IP: 192.168.2.70 职责:客户端
注:分配内存建议大于2G
测试服务器设置:
配置hosts(/etc/hosts)
192.168.2.14 node01
192.168.2.15 node02
192.168.2.17 node03
关闭防火墙&Sellinux
配置yum源:
#yum -y install epel-release
时间同步:
#rpm -qa |grep chrony
配置时间同步源:
# vi /etc/chrony.conf
# Please consider joining the pool (
0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 10.100.2.5 iburst
重启时间同步服务:# systemctl restart chronyd.service
node01和node02安装配置JDK:
#yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#安装openjdk
1)标准方式配置环境变量:
vim /etc/profile
将下面的三行粘贴到 /etc/profile中:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
2)保存关闭后,执行:source /etc/profile #让设置立即生效。
[root@~]# echo $JAVA_HOME
[root@ ~]# echo $CLASSPATH
[root@ ~]# echo $PATH
测试是否安装配置成功
# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
3)下载相应的组件到/home/soft
#wget
#wget
五、node01节点安装部署elasticsearch
1、创建elk用户、组
[root@node01 soft]groupadd elk
[root@node01 soft]useradd -g elk elk
2、elasticsearch解压至/usr/local/目录下
[root@node01 soft]#unzip elasticsearch-5.1.2.zip -d /usr/local/
3、创建data/db和data/logs分别存储数据文件和日志文件
[root@node01 soft]# mkdir -pv /data/{db,logs}
4、授权data/db和data/logs、/usr/local/elasticsearch-5.1.2文件夹elk用户及用户组读取权限
[root@node01 soft]chown elk:elk /usr/local/elasticsearch-5.1.2 -R
[root@node01 soft]chown elk:elk /data/{db,logs} -R
5、编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node01 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node01
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false
#关闭es认证 与kibana对应,不然后面安装x-pack需要用户名密码验证
注:
cluster.name: ELKstack-5 #集群的名字(可任意取名称)
node.name: node01 #换个节点名字
network.host: 0.0.0.0 #监听地址,0.0.0.0表示任意机器可以访问
http.port: 9200 #可默认
http.cors.enabled: true #head插件可以访问es
http.cors.allow-origin: "*"
discovery.zen.ping.unicast.hosts: 集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.minimum_master_nodes: 选举一个Master需要多少个节点(最少候选节点数),一般设置成 N/2 + 1,N是集群中节点的数量
xpack.security.enabled: false #关闭es认证 与kibana对应,禁用了认证功能,如果启用了认证,访问时需要指定用户名密码
6、根据elk运行环境,需要修改以下参数(修改参数以后建议重启机器)
1)[root@node01 config]# vim /etc/security/limits.conf #修改限制参数,允许elk用户访问mlockall
# allow user 'elk mlockall
elk soft memlock unlimited
elk hard memlock unlimited
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2)[root@node01 config]# vim /etc/security/limits.d/20-nproc.conf #修改可打开的文件描述符的最大数(软限制)
修改如下内容:
* soft nproc 4096
#修改为
* soft nproc 2048
3)[root@node01 config]# vim /etc/sysctl.conf #限制一个进程可以拥有的VMA(虚拟内存区域)的数量
添加下面配置:
vm.max_map_count=655360
[root@node01 config]# sysctl -p #刷新修改参数使其生效
4)修改jvm空间分配,因为elasticsearch5.x默认分配jvm空间大小为2g
[root@node01 elasticsearch-5.1.2]# vim config/jvm.options
-Xms2g
-Xmx2g
修改为
[root@node01 elasticsearch-5.1.2]# vim config/jvm.options
-Xms512m
-Xmx512m
不然会报以下错误:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1973026816 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/elasticsearch-5.1.2/hs_err_pid11986.log
5)启动elasticsearch服务,注:elasticsearch默认不允许root用户启动服务,切换至普通用户启动
[root@node01 elasticsearch-5.1.2]
#su - elk
[elk@node01 elasticsearch-5.1.2]$cd /usr/local/elasticsearch-5.1.2
[elk@node01 elasticsearch-5.1.2]$nohup ./bin/elasticsearch &
[elk@node01 elasticsearch-5.1.2]$./elasticsearch -d
#ElasticSearch后端启动命令
注:停止服务(ps -ef |grep elasticsearch 、kill PID)
6)启动后查看进程是否监听端口9200/9300,并且浏览器访问,是否正常输出es集群信息等
[root@node01 ~]# ss -tlnp |grep '9200'
LISTEN 0 128 :::9200 :::* users:(("java",pid=2288,fd=113)
{
"name" : "node01",
"cluster_name" : "ELKstack-5",
"cluster_uuid" : "jZ53M8nuRgyAKqgQCDG4Rw",
"version" : {
"number" : "5.1.2",
"build_hash" : "c8c4c16",
"build_date" : "2017-01-11T20:18:39.146Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
六、类似node01节点安装elasticsearch部署node02、node03节点
1、安装部署node02节点elasticsearch
1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node02 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node02
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false
#关闭es认证 与kibana对应
注:其他配置部署同node01
2、安装部署node03节点elasticsearch
1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:
[root@node02 config]# vim elasticsearch.yml
cluster.name: ELKstack-5
node.name: node03
path.data: /data/db
path.logs: /data/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: false #关闭es认证 与kibana对应
注:其他配置部署同node01
3、3个节点(node01,node02,node03)启动后,查看集群是否正常,节点是否正常
常用查询命令如下:
查看集群状态:curl -XGET
查看集群节点:curl -XGET
查询索引列表:curl -XGET
创建索引:curl -XPUT /customer?pretty
查询索引:curl -XGET /customer/external/1?pretty
删除索引:curl -XDELETE /customer?pretty
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1486384674 20:37:54 ELKstack-5 green 3 3 0 0 0 0 0 0 - 100.0%
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.2.17 22 94 3 0.58 0.55 0.27 mdi * node03
192.168.2.15 22 93 0 0.59 0.60 0.29 mdi - node02
192.168.2.14 22 93 1 0.85 0.77 0.37 mdi - node01
七、node3(192.168.2.17)节点上安装head插件(由于elasticsearch5.0版本变化较大,目前elasticsearch5.0 暂时不支持直接安装)
1、在从github上面下载代码,因此先要安装git,授权文件和目录(777)
[root@node03 local]# yum install git
[root@node03 local]# git clone git://github.com/mobz/elasticsearch-head.git
[root@node03 local]# chmod 777 -R elasticsearch-head/*
2、下载Node.js,并解压,配置进环境变量
[root@node03 soft]# tar -xvf node-v4.6.1-linux-x64.tar.gz #解压至当前目录
[root@node03 soft]#vim /etc/profile
添加如下: export PATH=/home/soft/node-v4.6.1-linux-x64/bin:$PATH
[root@node03 soft]#source /etc/profile #使配置文件生效。
3、在/usr/local/elasticsearch-head/目录下,进行npm install 使用node.js安装
[root@node03 elasticsearch-head]# npm install -g cnpm --registry=
[root@node03 elasticsearch-head]# npm install grunt --save-dev
4、修改目录/usr/local/elasticsearch-head/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '0.0.0.0',
base: '.',
keepalive: true
}
}
增加hostname属性,设置为*或'0.0.0.0'
5、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务
# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样
http.cors.enabled: true
http.cors.allow-origin: "*"
6、修改目录/usr/local/elasticsearch/plugins/head/_site/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '0.0.0.0',
base: '.',
keepalive: true
}
}
增加hostname属性,设置为*或'0.0.0.0'
7、修改/usr/local/elasticsearch-head/_site/app.js连接地址:
修改head的连接地址:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "
">";
把localhost修改为es的服务器地址,如:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "
">";
8、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务
# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样
http.cors.enabled: true
http.cors.allow-origin: "*"
9、解决依赖并启动服务
执行npm install下载依赖的包:
[root@node03 elasticsearch-head]#npm install
[root@node03 elasticsearch-head]#./node_modules/grunt/bin/grunt serverb &
#后台启动服务
测试访问:
八、node2(192.168.2.15)节点上安装部署kibana
1、kibana解压至/usr/local/目录下
1
[root@node02 soft]# tar -xvf kibana-5.1.2-linux-x86_64.tar.gz -C /usr/local/
2、修改/usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml配置文件,如下:并启动kibana服务
1
[root@node02 soft]#vim /usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "192.168.2.15"
elasticsearch_url: "
" data-ke-src=""
">"
xpack.security.enabled: false #关闭认证,为后面kibana增加x-pack组件免去用户名密码认证
[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana > /var/log/kibana
九、配置客户端test节点(192.168.2.70)
1、安装配置JDK(同node01~node03,这里不再阐述)
2、拷贝logstash至客户端,并解压至/usr/local/目录下
[root@node02 config]# scp /home/soft/logstash-5.1.2.zip root@192.168.2.70:/home/soft/
[root@test soft]#unzip logstash-5.1.2.zip -d /usr/local/
3、编辑logstash服务管理脚本(配置路径可根据实际情况修改)
[root@test logstash-5.1.2]# mkdir logs etc #创建目录logs,etc
[root@test logstash-5.1.2]# vim /etc/init.d/logstash
[root@test logstash-5.1.2]# chmod +x /etc/init.d/logstash #添加权限
脚本如下:
1
#!/bin/bash
#chkconfig: 2345 55 24
#description: logstash service manager
#auto: Maoqiu Guo
FILE='/usr/local/logstash-5.1.2/etc/*.conf' #logstash配置文件
LOGBIN='/usr/local/logstash-5.1.2/bin/logstash agent --verbose --config' #指定logstash配置文件的命令
LOCK='/usr/local/logstash-5.1.2/locks' #用锁文件配合服务启动与关闭
LOGLOG='--log /usr/local/logstash-5.1.2/logs/stdou.log' #日志
START() {
if [ -f $LOCK ];then
echo -e "Logstash is already \033[32mrunning\033[0m, do nothing."
else
echo -e "Start logstash service.\033[32mdone\033[m"
nohup ${LOGBIN} ${FILE} ${LOGLOG} &
touch $LOCK
fi
}
STOP() {
if [ ! -f $LOCK ];then
echo -e "Logstash is already stop, do nothing."
else
echo -e "Stop logstash serivce \033[32mdone\033[m"
rm -rf $LOCK
ps -ef | greplogstash | grep -v "grep" | awk '{print $2}' | xargskill -s 9 >/dev/null
fi
}
STATUS() {
psaux | greplogstash | grep -v "grep" >/dev/null
if [ -f $LOCK ] && [ $? -eq 0 ]; then
echo -e "Logstash is: \033[32mrunning\033[0m..."
else
echo -e "Logstash is: \033[31mstopped\033[0m..."
fi
}
TEST(){
${LOGBIN} ${FILE} --configtest
}
case "$1" in
start)
START
;;
stop)
STOP
;;
status)
STATUS
;;
restart)
STOP
sleep 2
START
;;
test)
TEST
;;
*)
echo "Usage: /etc/init.d/logstash (test|start|stop|status|restart)"
;;
esac
4、Logstash 向es集群写数据,并测试
1)、在/usr/local/logstash-5.1.2/etc/目录下编写一个logstash配置文件logstash.conf
[root@test etc]# cat logstash.conf
input { #数据的输入从标准输入
stdin {}
}
output { #数据的输出我们指向了es集群
elasticsearch {
hosts => ["192.168.2.14:9200","192.168.2.15:9200",192.168.2.17:9200"]#es主机的ip及端口
}
}
[root@test etc]# /usr/local/logstash-5.1.2/bin/logstash -f logstash.conf -t #查看配置是否正常
Sending Logstash's logs to /usr/local/logstash-5.1.2/logs which is now configured via log4j2.properties
Configuration OK
2)测试数据ES,修改logstash.conf配置文件,把messages输出到日志中,启动logstash服务
[root@test etc]# cat logstash.conf
input {#这里的输入使用的文件,即日志文件messsages
file {
path => "/var/log/messages"#这是日志文件的绝对路径
start_position => "beginning"#这个表示从messages的第一行读取,即文件开始处
}
}
output {#输出到es
elasticsearch {
hosts => ["192.168.2.14:9200","192.168.2.15:9200",192.168.2.17:9200"]
index => "messages-%{+YYYY-MM}"#这里将按照这个索引格式来创建索引
}
}
[root@test etc]# /usr/local/logstash-5.1.2/bin/logstash -f logstash.conf 或
[root@test etc]# /etc/init.d/logstash start
3)验证插件head和kibana是否从ES集群接收到数据并展示
head插件看到相关索引
九、安装部署Kafka消息队列
1、Kafka是一个分布式、可分区、可复制的消息系统, 在Kafka集群中,没有『中心主节点』的概念,集群中所有的服务器都是对等的,因此可以在不做任何配置更改的情况下对服务器进行添加和删除,同样的消息生产者和消费都也能做到随意重启和机器的上下线。
2、Kafka相关概念
kafka核心组件工作流程
Consumer:用于从Broker中取出/消费Message
Producer:用于往Broker中发送/生产Message
Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作
以上组件在分布式环境下均可以是多个,支持故障转移。同时ZooKeeper仅和broker和consumer相关。broker的设计是无状态的,消费的状态信息依靠消费者自己维护,通过一个offset偏移量。client和server之间通信采用TCP协议。
发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。队列模式中,consumers 可以同时从服务端读取消息,每个消息只被其中一个 consumer 读到;发布-订阅模式中消息被广播到所有的 consumer 中。更常见的是,每个 topic 都有若干数量的 consumer 组,每个组都是一个逻辑上的『订阅者』,为了容错和更好的稳定性,每个组由若干 consumer 组成。这其实就是一个发布-订阅模式,只不过订阅者是个组而不是单个 consumer。
3、kafka的Topic与Partition工作流程
消息是按照主题来提交到Partition当中的。Partition当中的消息是有序的,consumer从一个有序的分区消息队列中顺序获取消息。相关名次定义如下:
Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上
Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition
offset:消息在Partition中的编号,编号顺序不跨Partition
分区目的:Kafka中采用分区的设计有几个目的。一是可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。第二,分区可以作为并行处理的单元
offset:由消费者控制offset,因此分区本身所在broker是无状态的。消费者可以自由控制offset,很灵活
同个分区内有序消费:每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分配了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的
4、node01节点(192.168.2.14)上安装部署kafka(这里测试zookeeper没有集群,实际生产环境建议使用集群)
注:安装配置JDK环境这里省略,类同node01等节点
1)kafka解压至/usr/local/目录下,并创建链接kafka
[root@node01 soft]# tar -xvf kafka_2.11-0.10.1.0.tgz -C /usr/local/
[root@node01 soft]# cd /usr/local/
[root@node01 local]# ln -sv kafka_2.11-0.10.1.0 kafka
2)创建zookeeper存储目录,修改/usr/local/kafka/config/目录下zookeeper.propertie配置文件
[root@node01 local]# mkdir /data/zookeeper
[root@node01 local]#vim /usr/local/kafka/config/zookeeper.propertie
修改配置如下:
dataDir=/data/zookeeper
# the port at which the clients will connect
tickTime=2000 #维持心跳的时间间隔
initLimit=20
syncLimit=10
注:如果zookeeper集群的话,必须标识再配置文件server.2,server.*不同名称并且在/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的
如:
[root@kafka1 ~]# echo 2 > /data/zookeeper/myid
3)修改kafka配置/usr/local/kafka/config/目录下server.properties文件
broker.id=0 # 唯一,填数字,如果是集群该值必须不同如:2、3、4
listeners=PLAINTEXT://:9092 #监听端口
advertised.listeners=PLAINTEXT://192.168.2.14:9092 # 唯一,填服务器IP
log.dir=/data/kafka-logs # 该目录可以不用提前创建,在启动时自己会创建
zookeeper.connect=192.168.2.14:2181 #这个就是zookeeper的ip及端口
num.partitions=16 # 需要配置较大 分片影响读写速度
log.dirs=/data/kafka-logs # 数据目录也要单独配置磁盘较大的地方
log.retention.hours=168 # 时间按需求保留过期时间 避免磁盘满
4)启动kafka和zookeeper服务(先要启动zookeeper再启动kafka,如果是zookeeper集群如是)
[root@kafka1 ~]# /usr/local/kafka/bin/zookeeper-server-start.sh
/usr/local/kafka/config/zookeeper.properties & #zookeeper启动命令
注:/usr/local/kafka/bin/zookeeper-server-stop.sh #暂停服务
[root@node01 config]# ss -tlnp |grep '2181' #启动正常
LISTEN 0 50 :::2181 :::* users:(("java",pid=3118,fd=88))
[root@node01 config]# nohup /usr/local/kafka/bin/kafka-server-start.sh
/usr/local/kafka/config/server.properties &
#kafka启动的命令
或
#/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /dev/null &
注:/usr/local/kafka/bin/kafka-server-stop.sh #暂停服务
5)kafka创建一个主题
[root@node01 kafka]#bin/kafka-topics.sh --create --zookeeper 192.168.2.14:2181 --replication-factor 1 --partitions 1 --topic linuxtest
#注意:factor大小不能超过broker数
[root@node01 kafka]# bin/kafka-topics.sh --list --zookeeper 192.168.2.14:2181 #查看主题
linuxtest
[root@node01 kafka]#bin/kafka-topics.sh --describe --zookeeper 192.168.2.14:2181 --topic linuxtest
Topic:linuxtestPartitionCount:1ReplicationFactor:1Configs:
Topic: linuxtestPartition: 0Leader: 0Replicas: 0Isr: 0
6)发送消息,这里使用的是生产者角色
[root@node01 kafka]#bin/kafka-console-producer.sh --broker-list 192.168.2.14:9092 --topic linuxtest
This is a messages
welcometo kafka
7)接收消息,这里使用的是消费者角色
[root@node01 kafka]#bin/kafka-console-consumer.sh --zookeeper 192.168.2.14:2181 --topic linuxtest --from-beginning
This is a messages
welcometo kafka
5、修改客户端test节点logstash.conf配置文件,输出改到kafka上面,将数据写入到kafka中,重启logstash服务
[root@test etc]# cat logstash.conf
input { #这里的输入还是定义的是从日志文件输入
file {
type => "message"
path => "/var/log/messages"
start_position => "beginning"
}
}
output {
#stdout { codec => rubydebug } #这是标准输出到终端,可以用于调试看有没有输出,注意输出的方向可以有多个
kafka { #输出到kafka
bootstrap_servers => "192.168.2.14:9092" #他们就是生产者
topic_id => "linux-messages" #这个将作为主题的名称,将会自动创建
compression_type => "snappy" #压缩类型
}
}
[root@test etc]#/usr/local/logstash-5.1.2/bin/logstash -f logstash.conf > /dev/null &
6、从kafka中读取数据后输出到ES机器,node01安装部署Logstash,安装步骤不再赘述;注意这里的日志主题名称“linuxtest”,并启动服务
[root@node01 etc]# more logstash.conf
input {
kafka {
zk_connect => "192.168.2.14:2181" #消费者们
topic_id => "linuxtest"
codec => plain
reset_beginning => false
consumer_threads => 5
decorate_events => true
}
}
output {
elasticsearch {
hosts => ["192.168.2.14:9200","192.168.2.15:9200","192.168.2.17:9200"]
index => "linux-messages-%{+YYYY-MM}"
}
}
[root@node01 etc]# /usr/local/logstash/bin/logstash -f logstash.conf > /dev/null & #启动服务
7、验证在test客户端上写入测试内容
[root@webserver1etc]# echo "test-linux-messages到es集群!!!" >> /var/log/messages
#启动logstash,让其读取messages中的内容
十、安装部署X-Pack(需付费X-Pack License(可注册1年免费 License))
1、x-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。
注:以下为license 注册信息
curl -XPUT -u elastic:password '' -d @license.json
@license.json 申请得到的json文件,复制文件中的所有内容,粘贴在此。
如果提示需要acknowledge,则设置为true
curl -XPUT -u elastic:password '?acknowledge=true' -d @license.json
查看安装结果信息
curl -XGET -u elastic:password '
不同版本功能
X-Pack监控组件使您能够通过Kibana轻松监控Elasticsearch。 您可以实时查看集群运行状况和性能,以及分析过去的集群,索引和节点指标。 此外,您可以监控Kibana本身的性能。在群集上安装X-Pack时,监视代理会在每个节点上运行,以从Elasticsearch收集索引指标。 通过在Kibana中安装X-Pack,您可以通过一组专用仪表板查看监视数据。
x-pack安装之后有一个超级用户elastic ,其默认的密码是changeme,拥有对所有索引和数据的控制权,可以使用该用户创建和修改其他用户,当然这里可以通过kibana的web界面进行用户和用户组的管理。
X-pack的elk之间的数据传递保护,如:安装完x-pack之后,我们就可以用我们所创建的用户来保护elk之间的数据传递.
如下:
1)kibana<——>elasticsearch
在kibana.yml文件中配置:
elasticsearch.username: “elastic”
elasticsearch.password: “changeme”
2)logstash<——>elasticsearch
在自己写的配置文件中定义
input {
stdin{}
beats{
port => 5044
}
}
output {
elasticsearch {
hosts => [""]
user => elastic #必须有对应的用户/密码
password => changeme
}
stdout{
codec=>rubydebug
}
}
注:这里如果不进行相关配置的话,elk之间的数据传递就会出现问题
2、在各个ES集群节点/usr/local/elasticsearch-5.1.2/目录下以及kibana(本示例kibana在node02上)的/usr/local/kibana-5.1.2-linux-x86_64/
目录下安装X-Pack,并重启Kibana
1
[root@node01 elasticsearch-5.1.2]# bin/elasticsearch-plugin install x-pack
[root@node02 elasticsearch-5.1.2]# bin/elasticsearch-plugin install x-pack
[root@node03 elasticsearch-5.1.2]# bin/elasticsearch-plugin install x-pack
[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana-plugin install x-pack
[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana > /var/log/kibana.log 2>&1 & #kill进程后启动服务
注:卸载x-pack组件,#bin/elasticsearch-plugin remove x-pack
页面访问:,可以查看多了Monitoring选项,更多资料请参考官网
官方文档:
elasticsearch 权威指南:
ELK stack 权威指南:
ELK 开发指南:
****************************************************************************************************
常见问题总结:
#Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)
由于elasticsearch5.x默认分配jvm空间大小为2g,修改jvm空间分配
# vim config/jvm.options
-Xms2g
-Xmx2g
修改为
# vim config/jvm.options
-Xms512m
-Xmx512m
#max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
ulimit -SHn 65536
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
#max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
修改 /etc/security/limits.d/90-nproc.conf
* soft nproc 1024
* soft nproc 2048
#max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf配置文件,
cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144
如果不存在则添加
echo "vm.max_map_count=262144" >>/etc/sysctl.conf
#具体实例配置 192.168.10.67
ll -rt /home/haoren/data/filebeat-5.0.2-linux-x86_64/
drwxr-xr-x 2 haoren haoren 4096 11-24 18:02 scripts
-rw-r--r-- 1 haoren haoren 4196 11-24 18:02 filebeat.yml.bak
-rw-r--r-- 1 haoren haoren 1482 11-24 18:02 filebeat.template.json
-rw-r--r-- 1 haoren haoren 1873 11-24 18:02 filebeat.template-es2x.json
-rw-r--r-- 1 haoren haoren 31735 11-24 18:02 filebeat.full.yml
-rwxr-xr-x 1 haoren haoren 14790666 11-24 18:02 filebeat
-rwxr-xr-x 1 haoren haoren 1184 02-08 14:47 run.sh
-rw-r--r-- 1 haoren haoren 723 02-08 20:13 filebeat.yml
drwxr-xr-x 2 haoren haoren 4096 02-08 20:13 logs
drwxr-xr-x 2 haoren haoren 4096 02-08 20:53 data
cat /home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /log/billserver.log
#- /home/haoren/data/filebeat-5.0.2-linux-x86_64/test.log
encoding: gbk
symlinks: true
include_lines: ['\[.*?统计\]','\[.*?结算\]']
document_type: billserver
fields_under_root: true
fields:
host: 192.168.10.67
processors:
- drop_fields:
#fields: ["beat.hostname", "beat.name", "beat.version", "input_type", "beat"]
fields: ["input_type", "beat", "offset", "source"]
output.redis:
enabled: true
hosts: ["192.168.10.18"]
password: "A8841c09BAD52E63067C4DA"
port: 26379
datatype: list
key: "filebeat"
db: 0
output.file:
enabled: false
path: "/tmp/filebeat"
output.console:
enabled: false
#启动filebeat
cat /home/haoren/data/filebeat-5.0.2-linux-x86_64/run.sh
#!/bin/bash
#/home/haoren/data/filebeat-5.0.2-linux-x86_64
if [ $# -eq 0 ]; then
echo "error no param, please input param example 'runfilebeat.sh start'"
exit
fi
function stopserver()
{
echo "stopserver filebeat"
pid1=`ps ax | grep "filebeat" | grep "\/filebeat$" | awk '{print $1}'`
#pid1=`ps ax | grep "filebeat" | awk '{print $1}'`
for pid in ${pid1};do
echo "stopping " $pid
kill $pid
sleep 10
kill -9 $pid
sleep 10
echo "$pid stop finish"
done
echo "stopserver end"
}
function startserver()
{
echo "startserver filebeat"
cd /home/haoren/data/filebeat-5.0.2-linux-x86_64
/home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat &
sleep 10
pid1=`ps ax | grep "filebeat" | grep -v "grep" | wc -l`
if [ $pid1 -eq 0 ]; then
echo "failed start filebeat -d"
else
echo "start filebeat -d successs"
fi
echo "start server end"
exit
}
case $1 in
stop)
stopserver 0
;;
start)
startserver 0
;;
reboot)
stopserver 0
sleep 1
startserver 0
;;
*)
stopserver 0
sleep 1
startserver 0
;;
esac
ll -rt /home/haoren/data/logstash-5.0.2/
-rw-rw-r-- 1 haoren haoren 149 11-24 18:22 NOTICE.TXT
-rw-rw-r-- 1 haoren haoren 589 11-24 18:22 LICENSE
-rw-rw-r-- 1 haoren haoren 20837 11-24 18:22 Gemfile.jruby-1.9.lock
-rw-rw-r-- 1 haoren haoren 2249 11-24 18:22 CONTRIBUTORS
-rw-rw-r-- 1 haoren haoren 111731 11-24 18:22 CHANGELOG.md
-rw-rw-r-- 1 haoren haoren 3686 11-24 18:26 Gemfile
drwxrwxr-x 3 haoren haoren 4096 12-01 14:15 logstash-core-plugin-api
drwxrwxr-x 3 haoren haoren 4096 12-01 14:15 logstash-core-event-java
drwxrwxr-x 5 haoren haoren 4096 12-01 14:15 logstash-core
drwxrwxr-x 5 haoren haoren 4096 12-01 14:15 lib
drwxrwxr-x 2 haoren haoren 4096 12-01 14:15 bin
drwxrwxr-x 4 haoren haoren 4096 12-01 14:15 vendor
-rw-rw-r-- 1 haoren haoren 342 12-01 15:34 test.txt
drwxrwxr-x 3 haoren haoren 4096 12-01 15:43 data
-rw-r--r-- 1 haoren haoren 2559 12-01 15:52 test.conf
-rw-r--r-- 1 haoren haoren 2570 12-01 17:11 activityserver2.conf
-rw-r--r-- 1 haoren haoren 2618 12-20 12:44 activityserver.conf
-rwxr-xr-x 1 haoren haoren 80 02-09 14:04 logstash.sh
drwxrwxr-x 2 haoren haoren 4096 02-22 16:28 config
drwxrwxr-x 2 haoren haoren 4096 02-22 18:07 logs
-rw-r--r-- 1 haoren haoren 2154 02-22 18:51 billserver.conf
启动/home/haoren/data/logstash-5.0.2/logstash.sh
#!/bin/bash
/home/haoren/data/logstash-5.0.2/bin/logstash -f billserver.conf &
cat /home/haoren/data/logstash-5.0.2/billserver.conf
input {
file {
path => "/log/billserver.log"
codec => plain {
charset => "GBK"
}
#start_position => "beginning"
#sincedb_path => "/dev/null"
type => "billserver"
}
}
filter {
if ([message] =~ "\[人民币结算\]"){
mutate {replace => { "type" => "dubijiesuan" }}
grok {
#170208-10:00:28 Bill[40268] INFO: [人民币结算]时间(1486519228),用户ID(30581009),原来人民币(12567),现在人民币(16567),人民币操作(1),增加(4000),操作类型(19),操作详情(2),操作数量(0).描述:通用人民币操作
#170208-10:00:01 Bill[40268] INFO: [人民币结算]时间(1486519201),用户ID(22327945),原来人民币(2572),现在人民币(2532),人民币操作(2),扣除(40),操作类型(19),操作详情(15),操作数量(0).描述:通用人民币操作
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) Bill\[\d+\] INFO: \[人民币结算\]时间\(%{NUMBER:time:int}\),用户ID\(%{NUMBER:userid:int}\),原来人民币\(%{NUMBER:oldcoin:int}\),现在人民币\(%{NUMBER:currentcoin:int}\),人民币操作\(%{NUMBER:coinop:int}\),%{DATA:sop}\(%{NUMBER:coinnum:int}\),操作类型\(%{NUMBER:optype:int}\),操作详情\(%{NUMBER:opdetail:int}\),操作数量\(%{NUMBER:opnum:int}\).描述:%{DATA:sinfo}"]
}
}
else{
drop{}
}
date {
match => ["datetime", "yyMMdd-HH:mm:ss"]
#timezone => ["Asia/Hong_Kong"]
#remove_field => ["time"]
}
ruby {
code => "event.timestamp.time.localtime"
}
mutate {
#some pc no host
replace => { "host" => "192.168.10.67" }
}
}
output {
#stdout {
# codec => plain {
# charset => "UTF-8"
# #charset => "GBK"
# }
#}
#file {
# path => "/tmp/logstash.log"
# codec => json {
# charset => "UTF-8"
# }
#}
redis {
host => ["192.168.10.18"]
port => 26379
data_type => "list"
key => "logstash"
password => "A8841c09BAD52E63067C4DA"
codec => json {
charset => "UTF-8"
}
}
}
#192.168.10.18上的配置
ll -rt /home/haoren/data/logstash-5.0.2/
-rw-rw-r-- 1 haoren haoren 149 11月 24 10:22 NOTICE.TXT
-rw-rw-r-- 1 haoren haoren 589 11月 24 10:22 LICENSE
-rw-rw-r-- 1 haoren haoren 20837 11月 24 10:22 Gemfile.jruby-1.9.lock
-rw-rw-r-- 1 haoren haoren 2249 11月 24 10:22 CONTRIBUTORS
-rw-rw-r-- 1 haoren haoren 111731 11月 24 10:22 CHANGELOG.md
drwxrwxr-x 2 haoren haoren 4096 11月 24 10:22 data
-rw-rw-r-- 1 haoren haoren 3686 11月 24 10:26 Gemfile
drwxrwxr-x 2 haoren haoren 4096 11月 30 07:34 bin
drwxrwxr-x 5 haoren haoren 4096 11月 30 07:34 lib
drwxrwxr-x 5 haoren haoren 4096 11月 30 07:34 logstash-core
drwxrwxr-x 3 haoren haoren 4096 11月 30 07:34 logstash-core-plugin-api
drwxrwxr-x 3 haoren haoren 4096 11月 30 07:34 logstash-core-event-java
drwxrwxr-x 4 haoren haoren 4096 11月 30 07:34 vendor
-rwxrwxr-x 1 haoren haoren 78 11月 30 09:40 logstash.sh
drwxrwxr-x 2 haoren haoren 4096 12月 1 14:25 config
-rwxrwxr-x 1 haoren haoren 78 12月 6 10:33 filebeat.sh
-rw-r--r-- 1 haoren haoren 2534 12月 9 13:06 filebeat.bak
-rw-rw-r-- 1 haoren haoren 555 12月 20 08:27 logstash.conf
-rw-r--r-- 1 haoren haoren 3457 12月 20 08:28 filebeat.conf.bak
-rw-r--r-- 1 haoren haoren 6163 1月 11 08:20 filebeat.conf.20170112.bak
-rw-r--r-- 1 haoren haoren 5130 1月 11 08:20 filebeat.conf.20170111.bak
-rw-r--r-- 1 haoren haoren 292 1月 11 13:31 filebeat.txt
-rw-rw-r-- 1 haoren haoren 2636 1月 12 03:47 filebeat20170112.txt
-rw-rw-r-- 1 haoren haoren 2636 1月 12 03:47 filebeat.json
-rw-r--r-- 1 haoren haoren 7385 1月 12 03:57 filebeat.20170112
-rw-r--r-- 1 haoren haoren 7390 1月 18 02:31 filebeat.conf.2070118.bak
-rw-r--r-- 1 haoren haoren 7853 2月 8 12:16 filebeat.conf.20170208.bak
-rw-r--r-- 1 haoren haoren 9011 2月 8 12:16 filebeat.conf
-rwxrwxr-x 1 haoren haoren 528 3月 7 10:48 Del-logstash-log.sh
drwxrwxr-x 2 haoren haoren 4096 3月 11 16:08 logs
启动/home/haoren/data/logstash-5.0.2/logstash.sh
#!/bin/bash
/home/haoren/data/logstash-5.0.2/bin/logstash -f logstash.conf &
cat /home/haoren/data/logstash-5.0.2/logstash.conf
input {
redis {
host => ["192.168.10.18"]
port => 26379
password => "A8841c09BAD52E63067C4DA"
data_type => "list"
key => "logstash"
codec => json {
charset => "UTF-8"
}
}
}
filter {
ruby {
code=>"event.set('daytag',event.timestamp.time.localtime.strftime('%Y.%m.%d'))"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:19200"]
index => "%{type}-%{daytag}"
#index => "%{type}-%{+yyyy.MM.dd}"
user => "logstashserver"
password => "A950C0FB2D833E42C1AC59210CD5CDF8"
}
}
启动 /home/haoren/data/logstash-5.0.2/filebeat.sh
#!/bin/bash
/home/haoren/data/logstash-5.0.2/bin/logstash -f filebeat.conf &
cat /home/haoren/data/logstash-5.0.2/filebeat.conf
input {
redis {
host => ["192.168.10.18"]
port => 26379
password => "A8841c09BAD52E63067C4DA"
data_type => "list"
key => "filebeat"
codec => json {
charset => "UTF-8"
}
}
#file {
# path => "/home/haoren/data/logstash-5.0.2/filebeat.txt"
# codec => plain {
# charset => "GBK"
# }
# start_position => "beginning"
# sincedb_path => "/dev/null"
# type => "pchannelserver"
#}
#file {
# path => "/home/haoren/data/logstash-5.0.2/filebeat.json"
# codec => json {
# charset => "UTF-8"
# }
# start_position => "beginning"
# sincedb_path => "/dev/null"
# type => "pchannelserver"
#}
}
filter {
if( [type] == "sessionserver" ){
if( [message] =~ "登陆统计"){
mutate {replace => { "type" => "userlogin" }}
grok {
#161206-16:00:00 SS[4306] TRACE: [登陆统计]收到角色(82559870)登陆(PC)IP(124.239.95.209)MAC(52229449286)机器ID(454070640)渠道(0)gameid(6)端口(3889)登陆类型(1)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) SS\[\d+\].*?TRACE: \[登陆统计\]收到角色\(%{NUMBER:userid:int}\)登陆\(%{DATA:sclient}\)IP\(%{DATA:sip}\)MAC\(%{DATA:smac}\)机器ID\(%{NUMBER:mid:int}\)渠道\(%{NUMBER:apkid:int}\)gameid\(%{NUMBER:gameid:int}\)端口\(%{NUMBER:port:int}\)登陆类型\(%{NUMBER:logintype:int}\)"]
}
}
else if ([message] =~ "注册统计"){
mutate {replace => { "type" => "userreg" }}
grok{
#161205-15:33:22 SS[4306] TRACE: [注册统计]用户(87475178)注册(Android)渠道(8)账号(_wx_omj_avq_nz8obsk6yy5dsmfrlfmk)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) SS\[\d+\].*?TRACE: \[注册统计\]用户\(%{NUMBER:userid:int}\)注册\(%{DATA:sclient}\)渠道\(%{NUMBER:apkid:int}\)账号\(%{DATA:saccount}\)" ]
}
}
#else{
# drop{}
#}
}
else if( [type] == "activityserver" ){
if( [message] =~ "用户注册渠道奖励统计"){
mutate {replace => { "type" => "actvityregreward" }}
grok {
#161212-10:17:29 ActivityServer[17702] INFO: [UserRegisterReward.cpp:90] [用户注册渠道奖励统计]用户(87582819)客户端(0)注册渠道(1001)机器码(476931654)奖励包裹(77)个数(100)当日奖励(100)上限(1000000)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\].*?INFO: .*?\[用户注册渠道奖励统计\]用户\(%{NUMBER:userid:int}\)客户端\(%{NUMBER:client:int}\)注册渠道\(%{NUMBER:apkid:int}\)机器码\(%{NUMBER:mid:int}\)奖励包裹\(%{NUMBER:packid:int}\)个数\(%{NUMBER:num:int}\)当日奖励\(%{NUMBER:todaynum:int}\)上限\(%{NUMBER:maxnum:int}\)\)"]
}
}
else if( [message] =~ "充值礼包统计"){
mutate {replace => { "type" => "activityrechargebag" }}
grok {
#161220-17:02:53 ActivityServer[17700] INFO: [ActivityRechargeBag.cpp:559] [充值礼包统计]用户(60163778)获得(8800)礼包类型(2)用户获得( 1029:1)商户获得( 1062:688)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\].*?INFO: \[.*?\] \[充值礼包统计\]用户\(%{NUMBER:userid:int}\)获得\(%{NUMBER:pid:int}\)礼包类型\(%{NUMBER:ptype:int}\)用户获得\(%{DATA:userget}\)商户获得\(%{DATA:singerget}\)"]
}
}
else if( [message] =~ "16年购物统计"){
mutate {replace => { "type" => "activitymodules" }}
grok {
#161220-17:05:31 ActivityServer[17702] INFO: [ActivityModules.cpp:837][2016双12] [16年购物统计]用户(84795176)购物平台(65780103)商户(65780103)个数(20)礼物(92)价值(0)原分数(385399)增加分数(20)现分数(385419)淘汰(0)新旧(0)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\] INFO: \[.*?\]\[2016双12\] \[16年购物统计\]用户\(%{NUMBER:userid:int}\)购物平台\(%{NUMBER:channelid:int}\)商户\(%{NUMBER:singerid:int}\)个数\(%{NUMBER:num:int}\)礼物\(%{NUMBER:itemid:int}\)价值\(%{NUMBER:coin:int}\)原分数\(%{NUMBER:oldscore:int}\)增加分数\(%{NUMBER:addscore:int}\)现分数\(%{NUMBER:nowscore:int}\)淘汰\(%{NUMBER:out:int}\)新旧\(%{NUMBER:isnew:int}\)"]
}
}
}
else if( [type] == "vchannelserver" ){
if( [message] =~ "进出购物平台统计"){
mutate {replace => { "type" => "vchannelin" }}
grok {
#170109-12:59:39 VChannelServer[15000] INFO: [Channel.cpp:414] [进出购物平台统计]用户(22016998)(进入)购物平台(3998186)端(0)渠道(0)IMState(6)机器ID(246418457)商户(87261227)游客(0)
#170109-12:59:40 VChannelServer[15000] INFO: [Channel.cpp:414] [进出购物平台统计]用户(83735196)(离开)购物平台(4029779)端(3)渠道(0)IMState(13)机器ID(0)商户(0)游客(0)
#170118-09:59:58 VChannelServer[15001] INFO: [Channel.cpp:417] [进出购物平台统计]用户(87455625)(进入)购物平台(3830989)端(3)渠道(2017)IMState(13)机器ID(0)商户(65256549)游客(0)游戏id(0)
#170118-09:59:59 VChannelServer[15001] INFO: [Channel.cpp:417] [进出购物平台统计]用户(3015482583)(离开)购物平台(3830989)端(0)渠道(0)IMState(13)机器ID(0)商户(65256549)游客(1)游戏id(0)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) VChannelServer\[\d+\] INFO: \[.*?\] \[进出购物平台统计\]用户\(%{NUMBER:userid:int}\)\(%{DATA:sop}\)购物平台\(%{NUMBER:channelid:int}\)端\(%{NUMBER:client:int}\)渠道\(%{NUMBER:apkid:int}\)IMState\(%{NUMBER:imstate:int}\)机器ID\(%{NUMBER:mid:int}\)商户\(%{NUMBER:singerid:int}\)游客\(%{NUMBER:istemp:int}\)游戏id\(%{NUMBER:gameid:int}\)"]
}
}
}
else if( [type] == "pchannelserver" ){
if( [message] =~ "进出购物平台统计"){
mutate {replace => { "type" => "pchannelin" }}
grok {
#170111-00:00:17 PChannelServer[18701] INFO: [进出购物平台统计]用户(88464974)(进入)购物平台(86972527)端(0)渠道(0)IMState(6)机器ID(0)商户(86972527)游客(0)
#170111-00:00:43 PChannelServer[18701] INFO: [进出购物平台统计]用户(88464904)(退出)购物平台(86972527)端(0)渠道(0)IMState(6)机器ID(0)商户(86972527)游客(0)
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) PChannelServer\[\d+\] INFO: \[进出购物平台统计\]用户\(%{NUMBER:userid:int}\)\(%{DATA:sop}\)购物平台\(%{NUMBER:channelid:int}\)端\(%{NUMBER:client:int}\)渠道\(%{NUMBER:apkid:int}\)IMState\(%{NUMBER:imstate:int}\)机器ID\(%{NUMBER:mid:int}\)商户\(%{NUMBER:singerid:int}\)游客\(%{NUMBER:istemp:int}\)"]
}
}
}
else if( [type] == "billserver" ){
if( [message] =~ "人民币统计"){
mutate {replace => { "type" => "dubijiesuan" }}
grok {
#170208-10:00:28 Bill[40268] INFO: [人民币结算]时间(1486519228),用户ID(30581009),原来人民币(12567),现在人民币(16567),人民币操作(1),增加(4000),操作类型(19),操作详情(2),操作数量(0).描述:通用人民币操作
#170208-10:00:01 Bill[40268] INFO: [人民币结算]时间(1486519201),用户ID(22327945),原来人民币(2572),现在人民币(2532),人民币操作(2),扣除(40),操作类型(19),操作详情(15),操作数量(0).描述:通用人民币操作
match => [ "message", "(?(?>\d{6}-\d\d:\d\d:\d\d)) Bill\[\d+\] INFO: \[人民币结算\]时间\(%{NUMBER:time:int}\),用户ID\(%{NUMBER:userid:int}\),原来人民币\(%{NUMBER:oldcoin:int}\),现在人民币\(%{NUMBER:currentcoin:int}\),人民币操作\(%{NUMBER:coinop:int}\),%{DATA:sop}\(%{NUMBER:coinnum:int}\),操作类型\(%{NUMBER:optype:int}\),操作详情\(%{NUMBER:opdetail:int}\),操作数量\(%{NUMBER:opnum:int}\).描述:%{DATA:sinfo}"]
}
}
}
else{
drop{}
}
date {
match => ["datetime", "yyMMdd-HH:mm:ss"]
}
ruby {
code => "event.timestamp.time.localtime"
}
ruby {
code => "event.set('daytag',event.timestamp.time.localtime.strftime('%Y.%m.%d'))"
remove_field => ["tags"]
}
}
output {
#stdout {
# codec => plain {
# charset => "UTF-8"
# #charset => "GBK"
# }
#}
#file {
# path => "/tmp/logstash.log"
# codec => json {
# charset => "UTF-8"
# }
#}
elasticsearch {
hosts => ["127.0.0.1:19200"]
index => "%{type}-%{daytag}"
#index => "%{type}-%{+yyyy.MM.dd}"
user => "logstashserver"
password => "A950C0FB2D833E42C1AC59210CD5CDF8"
}
}
ll /home/haoren/data/elasticsearch-5.0.2/
-rw-r--r-- 1 haoren haoren 9108 11月 24 10:05 README.textile
-rw-r--r-- 1 haoren haoren 150 11月 24 10:05 NOTICE.txt
-rw-r--r-- 1 haoren haoren 11358 11月 24 10:05 LICENSE.txt
drwxr-xr-x 2 haoren haoren 4096 11月 24 10:10 plugins
drwxr-xr-x 2 haoren haoren 4096 11月 24 10:10 lib
drwxr-xr-x 12 haoren haoren 4096 11月 24 10:10 modules
drwxrwxr-x 3 haoren haoren 4096 12月 1 03:18 data
-rwxrwxr-x 1 haoren haoren 114 12月 1 03:30 elasticsearch.sh
-rw------- 1 haoren haoren 2197468100 12月 20 13:24 java_pid15072.hprof
drwxr-xr-x 2 haoren haoren 4096 2月 9 03:58 bin
drwxr-xr-x 3 haoren haoren 4096 3月 1 07:58 config
drwxrwxr-x 2 haoren haoren 4096 3月 11 16:00 logs
cat /home/haoren/data/elasticsearch-5.0.2/elasticsearch.sh
#!/bin/bash
cd /home/haoren/data/elasticsearch-5.0.2/
/home/haoren/data/elasticsearch-5.0.2/bin/elasticsearch -d
grep -v "#" /home/haoren/data/elasticsearch-5.0.2/config/jvm.options
-Xms4g
-Xmx4g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-server
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-Djdk.io.permissionsUseCanonicalPath=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
-XX:+HeapDumpOnOutOfMemoryError
grep -v "#" /home/haoren/data/elasticsearch-5.0.2/config/elasticsearch.yml
cluster.name: es-5.0-haoren
node.name: node-18
network.host: 0.0.0.0
http.port: 19200
http.cors.enabled: true
http.cors.allow-origin: "*"
cat /home/haoren/data/elasticsearch-5.0.2/config/log4j2.properties
status = error
# log action execution errors for easier debugging
logger.action.name = org.elasticsearch.action
logger.action.level = debug
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.rolling.ref = rolling
appender.deprecation_rolling.type = RollingFile
appender.deprecation_rolling.name = deprecation_rolling
appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log
appender.deprecation_rolling.layout.type = PatternLayout
appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz
appender.deprecation_rolling.policies.type = Policies
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.deprecation_rolling.policies.size.size = 1GB
appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
appender.deprecation_rolling.strategy.max = 4
logger.deprecation.name = org.elasticsearch.deprecation
logger.deprecation.level = warn
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
logger.deprecation.additivity = false
appender.index_search_slowlog_rolling.type = RollingFile
appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log
appender.index_search_slowlog_rolling.layout.type = PatternLayout
appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log
appender.index_search_slowlog_rolling.policies.type = Policies
appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_search_slowlog_rolling.policies.time.interval = 1
appender.index_search_slowlog_rolling.policies.time.modulate = true
logger.index_search_slowlog_rolling.name = index.search.slowlog
logger.index_search_slowlog_rolling.level = trace
logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
logger.index_search_slowlog_rolling.additivity = false
appender.index_indexing_slowlog_rolling.type = RollingFile
appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log
appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
appender.index_indexing_slowlog_rolling.policies.type = Policies
appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_indexing_slowlog_rolling.policies.time.interval = 1
appender.index_indexing_slowlog_rolling.policies.time.modulate = true
logger.index_indexing_slowlog.name = index.indexing.slowlog.index
logger.index_indexing_slowlog.level = trace
logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
logger.index_indexing_slowlog.additivity = false
ll -rt /home/haoren/data/kibana-5.0.2-linux-x86_64/
drwxrwxr-x 2 haoren haoren 4096 11月 24 10:16 webpackShims
drwxrwxr-x 9 haoren haoren 4096 11月 24 10:16 src
-rw-rw-r-- 1 haoren haoren 4962 11月 24 10:16 README.txt
drwxrwxr-x 2 haoren haoren 4096 11月 24 10:16 plugins
-rw-rw-r-- 1 haoren haoren 701 11月 24 10:16 package.json
drwxrwxr-x 3 haoren haoren 4096 11月 24 10:16 optimize
drwxrwxr-x 472 haoren haoren 20480 11月 24 10:16 node_modules
drwxrwxr-x 6 haoren haoren 4096 11月 24 10:16 node
-rw-rw-r-- 1 haoren haoren 562 11月 24 10:16 LICENSE.txt
drwxrwxr-x 2 haoren haoren 4096 11月 24 10:16 bin
drwxrwxr-x 2 haoren haoren 4096 12月 1 03:44 data
-rwxrwxr-x 1 haoren haoren 123 12月 1 06:07 kibana.sh
drwxrwxr-x 2 haoren haoren 4096 2月 8 12:25 config
启动 /home/haoren/data/kibana-5.0.2-linux-x86_64/kibana.sh
#!/bin/bash
cd /home/haoren/data/kibana-5.0.2-linux-x86_64
/home/haoren/data/kibana-5.0.2-linux-x86_64/bin/kibana serve &
cat /home/haoren/data/kibana-5.0.2-linux-x86_64/config/kibana.yml
server.port: 15602
server.host: "0.0.0.0"
elasticsearch.url: ""
192.168.10.21配置
cd /home/haoren/data/filebeat-5.0.2-linux-x86_64
[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ ll -rt
drwxr-xr-x 2 haoren haoren 4096 11-24 18:02 scripts
-rw-r--r-- 1 haoren haoren 4196 11-24 18:02 filebeat.yml.bak
-rw-r--r-- 1 haoren haoren 1482 11-24 18:02 filebeat.template.json
-rw-r--r-- 1 haoren haoren 1873 11-24 18:02 filebeat.template-es2x.json
-rw-r--r-- 1 haoren haoren 31735 11-24 18:02 filebeat.full.yml
-rwxr-xr-x 1 haoren haoren 14790666 11-24 18:02 filebeat
-rwxr-xr-x 1 haoren haoren 1175 12-20 16:22 run.sh
-rw-rw-r-- 1 haoren haoren 6311 12-20 20:08 test1.log
-rw-rw-r-- 1 haoren haoren 6311 12-20 20:17 test2.log
-rw-r--r-- 1 haoren haoren 732 12-20 20:18 filebeat.yml
drwxr-xr-x 2 haoren haoren 4096 03-11 05:01 logs
drwxr-xr-x 2 haoren haoren 4096 03-23 20:37 data
[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ cat filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /log/activityserver.log
#- /home/haoren/data/filebeat-5.0.2-linux-x86_64/test2.log
encoding: gbk
symlinks: true
include_lines: ['\[.*?统计\]','\[.*?结算\]']
document_type: activityserver
fields_under_root: true
fields:
host: 192.168.10.21
processors:
- drop_fields:
#fields: ["beat.hostname", "beat.name", "beat.version", "input_type", "beat"]
fields: ["input_type", "beat", "offset", "source"]
output.redis:
enabled: true
hosts: ["192.168.10.18"]
password: "A8841c09BAD52E63067C4DA"
port: 26379
datatype: list
key: "filebeat"
db: 0
output.file:
enabled: false
path: "/tmp/filebeat"
output.console:
enabled: false
[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ cat run.sh
#!/bin/bash
#/home/haoren/data/filebeat-5.0.2-linux-x86_64
if [ $# -eq 0 ]; then
echo "error no param, please input param example 'runfilebeat.sh start'"
exit
fi
function stopserver()
{
echo "stopserver filebeat"
pid1=`ps ax | grep "filebeat" | grep "\/filebeat$" | awk '{print $1}'`
#pid1=`ps ax | grep "filebeat" | awk '{print $1}'`
for pid in ${pid1};do
echo "stopping " $pid
kill $pid
sleep 10
kill -9 $pid
sleep 10
echo "$pid stop finish"
done
echo "stopserver end"
}
function startserver()
{
echo "startserver filebeat"
cd /home/haoren/data/filebeat-5.0.2-linux-x86_64
/home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat &
sleep 10
pid1=`ps ax | grep "filebeat" | grep -v "grep" | wc -l`
if [ $pid1 -eq 0 ]; then
echo "failed start filebeat -d"
else
echo "start filebeat -d successs"
fi
echo "start server end"
}
case $1 in
stop)
stopserver 0
;;
start)
startserver 0
;;
reboot)
stopserver 0
sleep 1
startserver 0
;;
*)
stopserver 0
sleep 1
startserver 0
;;
esac