文章采集系统(一套开源的分布式日志管理方案(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日志采集系统搭建》