该教程只提供简单部署,如果需要深入了解,可以查看官方文档
https://www.elastic.co/guide/index.html
为了方便演示,此处采用单台服务器进行部署,服务器资源至少需要2核4G
系统架构:
1、传统部署
我们先部署一个nginx、用来模拟业务日志
1、部署、测试
yum -y install nginx
systemctl start nginx
curl 127.0.0.1
tail /var/log/nginx/access.log
2、修改nginx日志格式
nginx日志默认格式为log格式,传输到es中需要经过grok插件进行处理并转换成json格式,这一过程是很消耗logstash资源的,而且传入到es中的字段并不容易分析,所以在收集端先将日志转为json格式,再传入es中去,这样传入的字段也是利于分析的。
编辑nginx配置文件
vim /usr/local/nginx/conf/nginx.conf #修改主配置文件,定义日志格式
---------------------------------------------------------
log_format json '{ "@timestamp": "$time_iso8601", '
'"time": "$time_iso8601", '
'"clientip": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"host": "$host", '
'"request": "$request", '
'"request_method": "$request_method", '
'"uri": "$uri", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" '
'}';
access_log /var/log/nginx/io.log json ;
---------------------------------------------------------
systemctl restart nginx
1.1 filebeat部署
filebeat是一个轻量级的日志采集器。虽然logstash可以采集,但是由于logstash比较消耗资源,不适合在每台主机上部署logstash。
1.安装
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.1-x86_64.rpm
rpm -vi filebeat-7.0.1-x86_64.rpm
2.修改配置文件
vim /etc/filebeat/filebeat.yml
--------------------------------------
# 日志输入
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields:
type: nginx_access
fields_under_root: true
setup.template.settings:
index.number_of_shards: 1
# 日志输出
output.redis:
hosts: ["redis_ip:6379"]
key: "nginx"
keys:
- key: "%{[type]}"
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
----------------------------------------
systemctl restart filebeat
1.2 redis部署
redis服务器是logstash官方推荐的broker(代理人)选择,broker角色也就意味着会同时存在输入和输出两个插件,产生数据的被称作生产者,而消费数据的被称作消费者。
redis消息队列作用说明:
1、防止Logstash和ES无法正常通信,从而丢失日志。
2、防止日志量过大导致ES无法承受大量写操作从而丢失日志。
3、应用程序(php,java)在输出日志时,可以直接输出到消息队列,从而完成日志收集。
补充:如果redis使用的消息队列出现扩展瓶颈,可以使用更加强大的kafka,flume来代替。
1、编译安装
wget http://download.redis.io/releases/redis-4.0.11.tar.gz #下载Redis源码
tar -zxf redis-4.0.11.tar.gz #解压Redis源码
cp -r redis-4.0.11 /usr/local/
mv redis-4.0.11/ redis
cd /usr/local/redis/
cp redis.conf bin/
make PREFIX=/usr/local/redis install #编译安装Redis
echo "export PATH=$PATH:/usr/local/redis/bin" >> /etc/profile 将Redis加入环境变量
2.后端模式启动
vim /usr/local/redis/bin/redis.conf
daemonize yes
redis-server redis.conf
3、访问nginx产生几条日志,然后查看redis数据
redis-cli
> llen nginx_access
1.3 logstash部署
1、安装jdk 1.8
yum -y install java
2.下载并安装公共签名密钥
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
3.添加logstash的yum仓库
vim /etc/yum.repos.d/logstash.repo
[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
4.使用yum安装logstash
yum install logstash
5.修改配置
vim /etc/logstash/conf.d/test.log
-----------------------
input {
redis {
host => "redis_ip"
port => 6379
type => "nginx_access"
data_type => "list"
key => "nginx_access"
codec => "json"
}
}
output {
if [type] == "nginx_access" {
elasticsearch {
hosts => ["es_ip:9200"]
index => "nginx_access-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
}
-----------------------
6、运行logstash
logstash -f /etc/logstash/conf.d/test.conf
观察redis里面得数量是否消费掉
1.4 elasticsearch
elasticsearch同样需要Java运行环境
1、下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.rpm.sha512
shasum -a 512 -c elasticsearch-6.4.3.rpm.sha512
sudo rpm --install elasticsearch-6.4.3.rpm
2.修改配置文件
[root@elastic elasticsearch-6.4.0]# vim config/elasticsearch.yml
修改内容如下:
cluster.name: my-elk #设置集群的名字
node.name: es1 #集群中的节点名称,同一集群中的节点名称不能重复
path.data: /elasticsearch/elasticsearch-6.4.0/data #设置es集群的数据位置
path.logs: /elasticsearch/elasticsearch-6.4.0/logs/ #设置存放日志的路径
network.host: 192.168.100.101 #绑定本地ip地址
http.port: 9200 #设置开放的端口,默认就是9200端口
3、授权
chown elasticsearch.elasticsearch /usr/local/elasticsearch -R
chown elasticsearch.elasticsearch /elasticsearch -R
4、开启
systemctl start elasticsearch.service
1.5 kibana部署
1、安装
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-x86_64.rpm
shasum -a 512 kibana-6.4.3-x86_64.rpm
sudo rpm --install kibana-6.4.3-x86_64.rpm
2、修改配置
vim /etc/kibana/kibana.yml
server.port: 5601 #kibana默认端口是5601
server.host: "192.168.100.101" #设置绑定的kibana服务的地址
elasticsearch.url: "http://192.168.100.101:9200" #设置elasticsearch服务器的ip地址,不修改的话启动的时候会报[elasticsearch] Unable to revive connection: http://localhost:9200/连接不上elasticsearch的错误
3、启动
systemctl start kibana