文章采集系统(一套开源的分布式日志管理方案(2)-负责日志)

优采云 发布时间: 2022-02-18 17:10

  文章采集系统(一套开源的分布式日志管理方案(2)-负责日志)

  目录

  ELK 是 Elasticsearch、Logstash 和 Kibana 的结合体,是一个开源的分布式日志管理解决方案。

  简介

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

  LogStash:负责日志的采集和处理

  Kibana:负责日志的可视化

  

  ELK 日志平台

  java8

  logstash和elasticsearch都依赖java,所以在安装这两个之前,我们应该先安装java,java版本大于7,但是官方推荐是java 8.

  安装:

  $sudo add-apt-repository -y ppa:webupd8team/java

$sudo apt-get update

$sudo apt-get -y install oracle-java8-installer

  弹性搜索

  我们以elasticsearch当前版本1.7为例,参考官方教程:在官方网站上下载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

  从官网下载最新的压缩包:解压到任意目录

  $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

  安装:

  参考官方教程:.

  在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(索引器)配置,/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

  对于logstash,我们有很多插件可以使用,其中过滤器部分的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 {

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,可以使用在线调试。当grok中的配置与日志格式不匹配时,可以在Kibana管理后台看到_grokparsefailure。

  启动logstash:

  $sudo service logstash start

  我们可以在kibana中看到日志数据,搜索起来也很方便。

  

  kibana

  参考:

  码字很难,转载请注明出处来自陈洁华《ELK日志采集系统搭建》

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线