ELK安装调试查询
ELK介绍
引用一个台湾兄弟的话Easy: Even CEO can use it Fast: Must be interactive Export: Provide the csv file Big: Must be scalable 80-‐20: Solves 80% problemsELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。
ELK Stac可以用于实时日志处理,数据分析等领域,目前了解该领域应该是开源界的第一选择。
处理方式灵活。Elasticsearch 是实时全文索引,不需要像 storm 那样预先编程才能使用;
配置简易上手。Elasticsearch 全部采用 JSON 接口,Logstash 是 Ruby DSL 设计,都是目前业界最通用的配置语法设计;
检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应;
集群线性扩展。不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的;
前端操作炫丽。Kibana 界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板。
kibana查询说明
这里仅对kibana 的查询和使用做个简单说明,kibana 更强悍的功能等待你去发现~
进入kibana http://192.168.28.206:5601/app/kibana 之后 第一次会提示
Index name or pattern Patterns allow you to define dynamic index names using * as a wildcard. Example: logstash-*普通使用 就输入logstash-* ,复杂点可以 logstash-test-*, logstash-225-* [可以指定多个index,如果有需要] 点击discover 进入搜索页面
输入* 点击搜索按钮 可以查看所有数据
输入request_time:>2 点击搜索可以查看今天访问速度大于2 的web页面
输入clientip:"192.168.30.211" 点击搜索可以看到这个ip用户的行为
输入host:'api.fumubang.net' 可以统计某个域名 的请求数量
输入host:'api.fumubang.net' && request_time:>2 统计某个域名 下请求时间大于2 的数据。
附kibana 查询方法 字段
也可以按页面左侧显示的字段搜索 限定字段全文搜索:field:value 精确搜索:关键字加上双引号 filed:"value" http.code:404 搜索http状态码为404的文档
字段本身是否存在 _exists_:http:返回结果中需要有http字段 _missing_:http:不能含有http字段
通配符
? 匹配单个字符
- 匹配0到多个字符
kiba?a, el*search
? * 不能用作第一个字符,例如:?text *text 正则
es支持部分正则功能 mesg:/mes{2}ages?/
模糊搜索
~:在一个单词后面加上~启用模糊搜索
first~ 也能匹配到 frist
还可以指定需要多少相似度 cromm~0.3 会匹配到 from 和 chrome 数值范围0.0 ~ 1.0,默认0.5,越大越接近搜索的原始值
近似搜索
在短语后面加上~ "select where"~3 表示 select 和 where 中间隔着3个单词以内
范围搜索
数值和时间类型的字段可以对某一范围进行查询 length:[100 TO 200] date:{"now-6h" TO "now"} [ ] 表示端点数值包含在范围内,{ } 表示端点数值不包含在范围内
逻辑操作
AND OR
+:搜索结果中必须包含此项 -:不能含有此项 +apache -jakarta test:结果中必须存在apache,不能有jakarta,test可有可无
分组
(jakarta OR apache) AND jakarta
字段分组
title:(+return +"pink panther")
转义特殊字符
+ - && || ! () {} [] ^" ~ * ? : \ 以上字符当作值搜索的时候需要用\转义
安装
- 安装jdk 1.7+
yum install java-1.7.0-openjdk
- 安装elasticsearch
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.2.1/elasticsearch-2.2.1.rpm yum install elasticsearch-2.2.1.rpm -y
- 安装logstash
wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-2.2.2-1.noarch.rpm && yum install logstash-2.2.2-1.noarch.rpm -y --nogpgcheck
- 安装kibana
wget https://download.elastic.co/kibana/kibana/kibana-4.4.2-linux-x64.tar.gz ; tar zvxf kibana-4.4.2-linux-x64.tar.gz ; mv kibana-4.4.2-linux-x64 /usr/local/kibana vi /etc/rc.d/init.d/kibana #!/bin/bash ### BEGIN INIT INFO # Provides: kibana # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Runs kibana daemon # Description: Runs the kibana daemon as a non-root user ### END INIT INFO # Process name NAME=kibana DESC="Kibana4" PROG="/etc/init.d/kibana" # Configure location of Kibana bin KIBANA_BIN=/usr/local/kibana/bin # PID Info PID_FOLDER=/var/run/kibana/ PID_FILE=/var/run/kibana/$NAME.pid LOCK_FILE=/var/lock/subsys/$NAME PATH=/bin:/usr/bin:/sbin:/usr/sbin:$KIBANA_BIN DAEMON=$KIBANA_BIN/$NAME # Configure User to run daemon process DAEMON_USER=root # Configure logging location KIBANA_LOG=/var/log/kibana.log # Begin Script RETVAL=0 if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 fi # Function library . /etc/init.d/functions start() { echo -n "Starting $DESC : " pid=`pidofproc -p $PID_FILE kibana` if [ -n "$pid" ] ; then echo "Already running." exit 0 else # Start Daemon if [ ! -d "$PID_FOLDER" ] ; then mkdir $PID_FOLDER fi daemon --user=$DAEMON_USER --pidfile=$PID_FILE $DAEMON 1>"$KIBANA_LOG" 2>&1 & sleep 2 pidofproc node > $PID_FILE RETVAL=$? [[ $? -eq 0 ]] && success || failure echo [ $RETVAL = 0 ] && touch $LOCK_FILE return $RETVAL fi } reload() { echo "Reload command is not implemented for this service." return $RETVAL } stop() { echo -n "Stopping $DESC : " killproc -p $PID_FILE $DAEMON RETVAL=$? echo [ $RETVAL = 0 ] && rm -f $PID_FILE $LOCK_FILE } case "$1" in start) start ;; stop) stop ;; status) status -p $PID_FILE $DAEMON RETVAL=$? ;; restart) stop start ;; reload) reload ;; *) # Invalid Arguments, print the following message. echo "Usage: $0 {start|stop|status|restart}" >&2 exit 2 ;; esac
配置
<1>elasticsearch
配置文件路径 : vi /etc/elasticsearch/elasticsearch.yml 1取消network.host 注释 并设置一个IP地址 network.host: 192.168.28.206 2 端口: http.port: 9200 3 索引存储位置 path.data: /home/fumubang/elasticsearch 4 日志存储位置 path.logs: /home/fumubang/elasticsearch/logs
<2>logstash on elk
vi /etc/logstash/conf.d/nginx_acces.conf input { redis { host => '127.0.0.1' # password=>'' #如果打算设定redis密码 data_type => 'list' port => "6379" key => 'logstash:nginx-dev-225:access_log' #日志存储 type => 'nginx' } } output { elasticsearch { hosts => ["192.168.28.206:9200"] index => "logstash-nginx-test-%{+YYYY.MM.dd}" workers => 1 # 增大workers 可以加快读取队列的速度 flush_size => 100 #每次最大存100 idle_flush_time => 10 #十秒更新一次 flush_size 、idle_flush_time 任意一个满足条件就刷新 高并发情况下需要注意设定 template_overwrite => true } }
<3>logstash on nginx
## 客户机 ## 注意pattens 文件夹yum安装没有 源码安装可以有 192.168.28.225 /usr/local/logstash-1.4.2有 没有请从源码安装或直接复制 ##vi /opt/logstash/pattens/nginx NGUSERNAME [a-zA-Z\.\@\-\+_%]+ NGUSER %{NGUSERNAME} NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent} %{QS:other} vii /etc/logstash/conf.d/nginx_acces.conf input { file { path => [ "/usr/local/nginx/logs/host.access.log" ] nginx 文件地址 可以有多个 start_position => "beginning" # 删除~/.sincedb_* 可以重新插入日志不删除表示默认从之前的地方加载输出 } } filter { mutate { replace => { "type" => "nginx_access" } } grok { match => { "message" => "%{NGINXACCESS}" } #pattens设定的 } kv { prefix => "" field_split => "&" exclude_keys => ["\"no","no"] #取消和需要删除的字段 source => "other" } urldecode { all_fields => true #转换url cookie 中的编码 } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } } output { redis { host => "192.168.28.206" #redis 服务器地址缓冲日志 data_type => "list" key => "logstash:nginx-dev-225:access_log" #redis key } #stdout { codec => rubydebug } #调试时使用 }
启动相关服务
<1>启动elasticsearch
service elasticsearch start
<2>启动logostash
logstash on elk service logostash start logostash on nginx nohup logstash agent -f /etc/logstash/conf.d/nginx.conf >/dev/null 2>&1
<3>启动kibana
service kibana start