您的位置:首页 > 大数据

ELK部署(版本5x)

2018-02-23 13:56 519 查看

ELK部署(版本5x)

介绍

ELK部署需要较高配置机器,推荐16G内存、4核以及200G硬盘以上机器部署,否则性能会减弱。

日志收集方面,我采用了rsyslog服务去将客户端的日志传输到rsyslog的服务端,rsyslog和logstash在一台服务器上,elasticsearch和kibana在一台服务器上,一共用了三台服务器。

安装ELK

官方网站:https://www.elastic.co/分别下载elasticsearch、logstash、kibana,推荐下载rpm安装包,安装完成后需要进行修改配。

Logstash配置

首先需要将logstash的配置文件夹软连接到logstash安装目录

cd /usr/share/logstash
ln -s /etc/logstash config


然后创建解配置文件以nginx为例

#建议将不同类型的日志配置文件放入不同的目录以便于区分
mkdir -p /usr/share/logstash/config/conf.d/nginx_log

vim test_logstash.conf
input {
file {
type => "test"
path => ["/www/log/test_*.log"]
start_position => "beginning"
}
filter {
grok {
match => ["message", "%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})\" (?:%{NUMBER:status}|-) (?:%{NUMBER:body_bytes_sent}|-) \"(%{NOTSPACE:http_referer}|-)\" \"(?:%{GREEDYDATA:http_user_agent}|-)\" \"(?:%{GREEDYDATA:http_x_forwarded_for}|-)\" \"(?:%{GREEDYDATA:request_time}|-)\" \"(?:%{GREEDYDATA:gzip_ratio}|-)\""]
}
mutate {
remove_field => [ "tags" ]
}

date {
match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"]
}
}

output {
# stdout { codec=> rubydebug }
elasticsearch {
hosts => ["192.168.1.213:9200"]
index => "nginx-%{type}-%{+YYYY.MM.dd}"
user => user
password=> passwd

}
}

#=============================================
配置文件介绍:
input,用来表示输入的文件位置,例如我的日志目录在/var/log/test2017.9.10,则需要写成/www/log/test*.log

filter,用来表示需要解析的类型,我们最终是要在kibana上去分析日志,所以这里要写成方便观察的日志。解析规则是通过grok语言来写的,但是写的过程中要对应自己log语言来写,以nginx日志为例我的nginx服务器日志规则如下:
log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$gzip_ratio"';
如果不一致,则需要自己去写。

mutate,如果日志记录出错,或者配置文件写错,会产生tags,利用mytate可以直接删除这个字段,减少报错日志。

output,表示输出到某个服务器,可以是redis,可以是数据库,我这边直接输出到了elasticsearch里。主意在配置完成后需要先别输出并且取消stdout { codec=> rubydebug }注释,输出到控制台上检测是否配置有问题。

配置完成后启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_log/test_logstash.conf &

如果想开机启动需要将命令放置到/etc/rc.local中


Elasticsearch配置

vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es  #名称
node.name: node-1 #节点名称
path.data: /opt/elasticsearch/data  #存放数据 --建议挂在到数据盘上
path.logs: /opt/elasticsearch/logs  #存放日志 --建议挂在到数据盘上
network.host: ["192.168.1.213","127.0.0.1"]  #ip地址,此处与4.0等低版本有区别
http.port: 9200  #端口
#以下为优化
bootstrap.system_call_filter: false
node.master: true
node.data: true
action.search.shard_count.limit: 5000
#=====================================
#修改内存限制
vim /etc/elasticsearch/jvm.options
-Xms8g
-Xmx8g


Kibana配置

vim /etc/kibana/kibana.yml
server.port: 5601 #端口
elasticsearch.url: "http://127.0.0.1:9200" #elasticsearch ip地址
elasticsearch.username: "user" #安装x-pack插件后需要配置
elasticsearch.password: "passwd"
elasticsearch.requestTimeout: 100000 #查询超时时间,如果数据量巨大,服务器性能一般需要配置高些


服务器内核优化

vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
vm.max_map_count=655360

#=======================
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc  65536

#========================
vim /etc/security/limits.d/90-nproc.conf
*          soft    nproc     unlimited
root       soft    nproc     unlimited


全部完成后启动elk查看是否有报错,kibana能否收到日志。

安装插件

为了管理方便,需要增加权限控制功能,就需要用到x-pack插件

cd /usr/share/elasticsearch/
bin/elasticsearch-plugin install x-pack
service elasticsearch restart
cd /usr/share/kibana/
bin/kibana-plugin install x-pack
service kibana restart
#安装完成后就可以配置人员权限,但是这个试用期30天,需要每月重装一次,如果不想麻烦,需要去官网申请认证。


辅助脚本

为了减少人工维护成本,需要脚本维护

#如果硬盘不是很大则需要定期删除数据,每天执行一次
#/bin/bash
#删除30天前数据
date1=`date +%Y.%m.%d --date="-30 day"`
curl -u user:passwd -XDELETE 'http://127.0.0.1:9200/*-'${date1}''

#如果单个节点的话会生成大量的UNASSIGNED,这个脚本可以设置每隔几小时清理一次
# !/bin/bash
DATE=$(date '+%Y-%m-%d %H:%M:%S')
Status=$(curl -u user:passwd -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED | grep -v grep | wc -l)
if [ $Status -eq 0 ]; then
echo "$DATE 无未分配分片" >> /var/log/status.log
else
echo "$DATE 有未分配分片" >> /var/log/status.log
curl -u user:passwd -XPUT "http://localhost:9200/_settings" -d' {  "number_of_replicas" : 0 } '
fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息