• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

ELK日志收集系统搭建 

ELK,也就是Elasticsearch、Logstash、Kibana三者的结合,是一套开源的分布式日志管理方案。

简介

Elasticsearch:负责日志存储、检索和分析

LogStash:负责日志的收集、处理

Kibana:负责日志的可视化

ELKR-log-platform

ELK-log-platform

java8

logstash和elasticsearch均依赖java,所以安装这两个之前,我们应该先安装好java,java version大于7,然而官方推荐最好是java 8.

安装:

$sudo add-apt-repository -y ppa:webupd8team/java
$sudo apt-get update
$sudo apt-get -y install oracle-java8-installer

Elasticsearch

我们以elasticsearch目前的版本1.7为例,参看官方教程:https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html,在官方网站上下载了elasticsearch的压缩包,解压到某个目录后执行即可。

当然,在Ubuntu下,我们可以用apt-get的方式安装:

下载并安装公钥:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

添加源:

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

安装:

$sudo apt-get update
$sudo apt-get install elasticsearch

设置开机启动:

$sudo update-rc.d elasticsearch defaults 95 10

配置:修改 network.host: localhost

$sudo vim /etc/elasticsearch/elasticsearch.yml

启动:elasticsearch启动后,即绑定在了localhost:9200端口上

$sudo service elasticsearch start

常用命令:

# 查看elasticsearch健康状态
$curl localhost:9200/_cat/health?v
# 查看elasticsearch indices
$curl localhost:9200/_cat/indices?v
# 删除指定的indices,这里删除了logstash-2015.09.26的indices
$curl -XDELETE localhost:9200/logstash-2015.09.26

Kibana

从官方下载最新的压缩包:https://www.elastic.co/guide/en/kibana/current/setup.html,解压到任意目录

$tar xvf kibana-*.tar.gz
$sudo mkdir -p /opt/kibana
$sudo cp -R ~/kibana-4*/* /opt/kibana/
# 将kibana作为一个服务
$cd /etc/init.d && sudo wget https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/bce61d85643c2dcdfbc2728c55a41dab444dca20/kibana4
$sudo chmod +x /etc/init.d/kibana4
# 将kibana设为开机启动
$sudo update-rc.d kibana4 defaults 96 9
# 修改kibana配置,因为我们采用nginx作为反向代理,修改 host: "localhsot"
$sudo vim /opt/kibana/config/kibana.yml
# 启动kibana,默认绑定在了localhost:5601
$sudo service kibana4 start

Nginx配置:

# elk
server {
    listen 80;
    server_name elk.chenjiehua.me;

    #auth_basic "Restricted Access";
    #auth_basic_user_file /home/ubuntu/htpasswd.users;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

如果需要限制访问权限,我们可以通过nginx的auth_basic进行设置:

$sudo apt-get install apache2-utils
# 新建一个kibana认证用户
$sudo htpasswd -c /home/ubuntu/htpasswd.users kibana
# 然后按提示设置kibana密码

$sudo nginx -t
$sudo nginx -s reload

 

Logstash

安装:

参考官方教程:https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

在Ubuntu下,我们可以用apt-get的方式来安装:

$sudo wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -
$sudo echo "deb http://packages.elasticsearch.org/logstash/1.5/debian stable main" | sudo tee -a /etc/apt/sources.list#
$sudo apt-get update
$sudo apt-get install logstash

在这里,logstash具有两个身份角色,一个是shipper,一个是indexer;当应用在分布式的系统中时,一般是多个shipper将日志收集然后发送到redis(作为broker身份),而indexer则从redis中读取数据进行处理,然后再发送给elasticsearch,而我们则可以通过kibana查看到所有的日志信息。

这里的broker采用的是redis作为消息系统,根据业务需要,我们也可以采用kafka等其他消息系统。

中心logstash(indexer)配置, /etc/logstash/conf.d/central.conf

input {
    redis {
        host => "127.0.0.1"
        port => 6379
        type => "redis-input"
        data_type => "list"
        key => "key_count"
    }
}

output {
    stdout {}
    elasticsearch {
        cluster => "elasticsearch"
        codec => "json"
        protocol => "http"
    }
}

远程logstash(shipper)配置,/etc/logstash/conf.d/shipper.conf

input {
    file {
        type => "type_count"
        path => ["/data/logs/count/stdout.log", "/data/logs/count/stderr.log"]
        exclude => ["*.gz", "access.log"]
    }
}

output {
    stdout {}
    redis {
        host => "20.8.40.49"
        port => 6379
        data_type => "list"
        key => "key_count"
    }
}

在这里,因为我们是在单台服务器上进行操作的,所以我们可以将indexer和shipper合并在一起,省去其中的redis。配置文件如下:

input {
    file {
        type => "blog"
        path => ["/home/ubuntu/log/nginx/blog.log"]
    }
}

output {
    stdout {}
    elasticsearch {
        cluster => "elasticsearch"
        codec => "json"
        host => "localhost"
        protocol => "http"
    }
}
basic_logstash_pipeline

basic_logstash_pipeline

对于logstash,我们有许多插件可以使用,其中比较常用的有filter部分的grok插件。假如我们要对nginx的日志进行处理,获取其中的各个字段信息,我们可以参看如下用法:

nginx的日志格式:

log_format main '$remote_addr - $remote_user [$time_local]'
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" $request_time';

access_log /var/log/nginx/access.log main;

Logstash中filter的配置:

filter {
    grok {
        match => { 'message' => '%{IP:remote_addr} - - \[%{HTTPDATE:time_local}\]"%{WORD:http_method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:body_bytes_sent} (?:\"(?:%{URI:http_referer}|-)\"|%{QS:http_referer}) %{QS:http_user_agent} %{NUMBER:request_time}' }
        remove_field => ["message"]
    }
    date {
        match => ["time_local", "dd/MMM/YYYY:HH:mm:ss Z"]
    }
}

关于grokdebugger,可以使用在线调试http://grokdebug.herokuapp.com/。当grok中的配置与日志格式不匹配时,在Kibana管理后台可以看到_grokparsefailure.

启动logstash:

$sudo service logstash start

我们就可以在kibana中看到日志的数据了,同时也可以非常方便的进行搜索等。

kibana

kibana

参考:

https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04

 https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html

码字很辛苦,转载请注明来自ChenJiehua《ELK日志收集系统搭建》

评论