elk日志系统01-安装配置

一、elk介绍

1.ElasticSearch:

节点(Node):节点是一个ES的实例,一般一台主机上部署一个节点-
集群(Cluster):集群由若干节点组成,和任意节点的通信等价于和集群的 通信
分片(Shard):一个索引会分成多个分片存储,分片数量在索引建立后不可更改
副本(Replica):副本是分片的一个拷贝,目的在于提高系统的容错性和搜索的效率
索引(Index):类似数据库的库
类型(Type):类似数据库的表
文档(Document):类似数据库的行,包含一个或多个Field
字段(Field):搜索的最小单元,可通过Mapping定义不同的属性(比如可否被搜索)

2.Logstash:

设计及架构

LogStash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。

在LogStash的生态系统中,主要分为四大组件:

  • Shipper:发送事件(events)至LogStash;通常,远程代理端(agent)只需要运行这个组件即可;
  • Broker and Indexer:接收并索引化事件;
  • Search and Storage:允许对事件进行搜索和存储;
  • Web Interface:基于Web的展示界面

LogStash的优势:

  1. 对日志数据更好的语法分析功能
  2. 更加灵活的日志存储方式
  3. 附带搜索和目录功能
  4. 易于安装、可扩展、性能良好等
  • 正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性。

在大多数情况下,LogStash主机可分为两大类:

代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;
中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

3.Kibana:

  • Kibana是一个基于浏览器页面的Elasticsearch前端展示工具。

二、安装elk

  • 本文将安装Elasticsearch-1.7.2, Logstash-1.5.5, Kibana-4.1.1。 请注意版本要求,有些组件需要相对应的版本。
    elk可以分布式部署在不同的机器上,收集展示端在一台机器上部署,客户端只部署logstash,目录统一在/data/Elk

1.安装java和redis

  • Elasticsearch和Logstash需要Java8,此过程省略。
  • 安装3.X,过程省略,在收集端安装完启动即可,端口为默认

2.安装Elasticsearch

把tar包解压到/data/Elk
修改配置文件

cd /data/Elk/elasticsearch/
vim config/elasticsearch.yml
path.data: /data/Elk/logdata    #指定elasticsearch收集日志数据存放目录
network.host: 1.1.1.11          #指定主机,默认指本机

3.安装Elasticsearch

安装Elasticsearch插件

elasticsearch 作为一个系统service应用 ,可以安装elasticsearch-servicewrapper插件。
https://github.com/elasticsearch/elasticsearch-servicewrapper下载该插件后,解压缩。将service目录拷贝到elasticsearch目录的bin目录下。运行这个插件的好处是:elasticsearch需要的jvm参数和其它配置都已经配置好了,非常方便。

chmod +x bin/*
集群管理:./bin/plugin -install mobz/elasticsearch-head         http://1.1.1.11:9200/_plugin/head/
集群性能监控:./bin/plugin -install lukas-vlcek/bigdesk/2.5.0    http://1.1.1.11:9200/_plugin/bigdesk/
#管理和监控:./bin/plugin -i elasticsearch/marvel/latest         http://1.1.1.11:9200/_plugin/marvel/
#./bin/plugin -r elasticsearch/marvel/latest   卸载插件
#集群管理: ./bin/plugin -install lmenezes/elasticsearch-kopf     http://1.1.1.11:9200/_plugin/kopf/
  • 注:对于插件的安装和更新,默认走的Gem源为 https://rubygems.org,对于咱们国内网络来说是出奇的慢或是根本无法访问(爬梯子除外),在安装或是更新插件是,可以尝试修改目录下 Gemfile 文件中的 source为淘宝源https://ruby.taobao.org,这样会使你的安装或是更新顺畅很多。

4.安装kibana

把tar包解压到/data/Elk
修改配置文件

cd /data/Elk/kibana/
vim config/kibana.yml 
port: 5601                 #指定端口,默认是5601
host: "1.1.1.11"           #指定主机
elasticsearch_url: "http://1.1.1.11:9200"   #指定elasticsearch
  • 配置文件中指明kibana侦听5601端口并且通过9200端口从elasticsearch里面获取数据。

5.安装Logstash

把tar包解压到/data/Elk,服务端和客户端都要安装

服务端配置

  • cat /data/Elk/logstash/conf/logstash_nginx_tomcat.conf
input {
    redis {
        host => "1.1.1.11"
        port => 6379 
        type => "nginx_logs"
        data_type => "list"
        key => "db:nginx"
    }
    redis {
        host => "1.1.1.11"
        port => 6379 
        type => "tomcat_logs"
        data_type => "list"
        key => "db:tomcat"
    }
}
filter {
    if [type] == "nginx_logs" {
    grok {
        match => { "message" => "%{IPORHOST:clientip} \- %{NOTSPACE:remoteuser} \[%{HTTPDATE:timestamp}\] %{NUMBER:response} \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:bytes} \"%{NOTSPACE:referrer}\" \"%{GREEDYDATA:useragent}\" %{IPORHOST:proxyip} \"%{IPORHOST:apiip}(?::%{POSINT:apiport})?\" \"%{NUMBER:elapsedtime}\"" }
        remove_field => [ "message"]
    }
    mutate {
        split => { "elapsedtime" => "." }
    }
    mutate {
        join => { "elapsedtime" => "" }
    }
    mutate {
        convert => { "elapsedtime" => "float" }
    }
    date {
        match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    }
    useragent{
        source => "useragent"
    }   
    geoip {
            source => "clientip"
    }
}
  if [type] == "tomcat_logs" {
       grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{NOTSPACE:hostname} %{LOGLEVEL:loglevel} %{GREEDYDATA:content}" }
        remove_field => [ "message"]
        }
        date {
        match => [ "timestamp", "ISO8601","yyyy-M-dd HH:mm:ss"]
        }
     }
}
output {
  if [type] == "nginx_logs" {
    elasticsearch { 
        protocol => "http"
        host => "1.1.1.11"
        index => 'nginx_log_%{+YYYY_MM_dd}'
        }
    }
   if [type] == "tomcat_logs" {
    elasticsearch {
        protocol => "http"
        host => "1.1.1.11"
        index => 'tomcat_log_%{+YYYY_MM_dd}'
        }
    }
}

客户端配置

  • cat /data/Elk/logstash/conf/logstash_nginx_tomcat.conf
input {
    file {
        path => ["/usr/local/nginx/logs/*.log"]
        start_position => beginning
    type => "nginx_logs"
    }
    file {
        path => ["/data/tomcat/*/logs/catalina.out"]
        start_position => beginning
    type => "tomcat_logs"
    }
}
output {
    if [type] == "nginx_logs" {
            redis {
            host => "1.1.1.11"
            port => 6379
            data_type => "list"
            key => "db:nginx"
        }
    }   
    if [type] == "tomcat_logs" {
        redis {
            host => "1.1.1.11"
            port => 6379
            data_type => "list"
            key => "db:tomcat"
            batch_events => 2
            }
    }
}

三、启动ELK

1.给命令授权

chmod +x /data/Elk/elasticsearch/bin/*
chmod +x /data/Elk/kibana/bin/*
chmod +x /data/Elk/kibana/node/bin/*
chmod +x /data/Elk/logstash/bin/*
chmod +x /data/Elk/logstash/vendor/jruby/bin/*

2.elk启动脚本

start-es.sh
#!/bin/bash
/data/Elk/elasticsearch/bin/elasticsearch  &
sleep 2

shutdown-es.sh
#!/bin/bash
ps -ef| grep -e elasticsearch | grep -v grep | awk '{system("kill -9 " $2)}'

start-logstash.sh
#!/bin/bash
/data/Elk/logstash/bin/logstash -w 5 -f /data/Elk/logstash/conf/logstash_nginx-tomcat.conf  -l  /data/Elk/logstash/bin/stash_log.txt &
sleep 3

shutdown-logstash.sh
#!/bin/bash
ps -ef| grep -e logstash | grep -v grep | awk '{system("kill -9 " $2)}'

start-kibana.sh
#!/bin/bash
/data/Elk/kibana/bin/kibana &

shutdown-kibana.sh
#!/bin/bash
ps -ef| grep -e kibana | grep -v grep | awk '{system("kill -9 " $2)}'

start-all.sh
#!/bin/bash
/data/Elk/elasticsearch/bin/elasticsearch  &
sleep 2
/data/Elk/logstash/bin/logstash -w 5 -f /data/Elk/logstash/conf/logstash_nginx-tomcat.conf  -l  /data/Elk/logstash/bin/stash_log.txt &
sleep 2
/data/Elk/kibana/bin/kibana &

shutdown-all.sh
#!/bin/bash
ps -ef| grep -e kibana | grep -v grep | awk '{system("kill -9 " $2)}'
ps -ef| grep -e logstash | grep -v grep | awk '{system("kill -9 " $2)}'
ps -ef| grep -e elasticsearch | grep -v grep | awk '{system("kill -9 " $2)}'

3.修改日志格式

以分析nginx日志为例,将nginx的日志格式改为如下:
log_format main ‘ remoteaddr remote_user [ timelocal] status ’
‘” request" body_bytes_sent “ httpreferer http_user_agent" proxy_add_x_forwarded_for “upstream_addr" "$request_time”’;
access_log /var/log/nginx/access.log main;
* 启动nginx和tomcat并访问项目

四、查看ELK

至此,整个搭建过程已完成,如需收集其他日志,应按要求制定相应的匹配规则,设置字段。

五、elk优化(copy by network):

1.日志类别与处理方法

Apache日志:自定义apache输出日志格式,json输出,无需filter参与
Tomcat日志:需将多行日志合并至一个事件中,并排除空白行

2.注意事项

Redis:部署多台,仅提供高可用作用,无分担负载作用,可使用ZeroMQ代替

ElasticSearch:

   1.LogStash默认为每一天创建1index,可手动    删除index 
    curl -XDELETE http://127.0.0.1:9200/logstash-2013.12.19 
    shell优化脚本:https://github.com/cnf/logstash-tools/blob/master/elasticsearch/clean-elasticsearch.sh 
   2.优化index: 
    curl -XPOST 'http://127.0.0.1:9200/logstash-2013.12.19/_optimize' 
    curl -XPOST 'http://127.0.0.1:9200/_optimize' # 优化所有index 
    curl 'http://127.0.0.1:9200/logstash-2013.12.19/_stats?clear=true&store=true&pretty=true' 
  • 查看index的大小,index过多会影响优化耗时,定期可删除数据

3.其他脚本

  • clean_es.sh
    01
#!/bin/bash
daysback=3
if [ ! -z $1 ]; then
    daysback=$1
fi
start=8
end=`expr $start \+ $daysback`
if [ $? == 0 ]; then
    for i in `seq $start $end`; do
        d=`date --date "$i days ago" +"%Y.%m.%d"`
        curl -XDELETE http://localhost:9200/logstash-$d > /dev/null 2>&1
    done
else
    echo "Invalid number of days specified, aborting"
fi
curl -XPOST 'http://localhost:9200/_optimize'

02

#!/bin/bash
#date=$(date -d "today" '+%Y-%m-%d-%H%M')
date=$(date -d "today" '+%Y-%m-%d')
date7=$(date -d "7 days ago" '+%Y_%m_%d')
save_days=5
filelist=`ls /data/Elk/elasticsearch/data/elasticsearch/nodes/`
for file in $filelist
do
  cd /data/Elk/elasticsearch/data/elasticsearch/nodes/$file/indices/
  /data/Elk/shutdown_elastic.sh
  sleep 10
  ls /data/Elk/elasticsearch/data/elasticsearch/nodes/$file/indices/*"$date7"
  rm -rf  /data/Elk/elasticsearch/data/elasticsearch/nodes/$file/indices/*"$date7"
  /data/Elk/start_elastic.sh
  #find /home/Elk/elasticsearch/data/elasticsearch/nodes/$file/indices/ -exec ls -l {} \;
 # find /home/Elk/elasticsearch/data/elasticsearch/nodes/$file/indices/ -mtime +${save_days} -exec ls  {} \;
#  find /opt/huiti/interface/$file/indices -name "*.log" -mtime +15 -exec rm -rf {} \;
#  find /opt/huiti/interface/$file/indices -name "*.txt" -mtime +15 -exec rm -rf {} \;
done

  • 全文完~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值