目录
1、整体架构
2、filebeat安装配置
3、Redis安装配置
4、配置filebeat-redis集成
5、elasticsearch和kibana安装配置
6、logstash安装配置
7、开始整个ELK项目流程打通
系统日志数据app.log-->filebeat(6.6)-->redis-->logstash(parse)-->es-->kibana
filebeat -----轻量级的日志收集工具 ,192.168.198.136/137/138
redis -----防止filebeat和logstash耦合性太高,队列存储数据,136主从
Logstash-----接收所有日志,监控,过滤,收集日志 ,读取,解析,136
es -----三台服务器集群,136/137/138,之前已配置 ,存储日志,提供搜索功能
Kibana -----提供web界面,支持查询,统计,图表展现,136
#filebeat安装
[root@master app]# tar zxvf filebeat-6.6.1-linux-x86_64.tar.gz
[root@master app]# ln -s filebeat-6.6.1-linux-x86_64/ filebeat
#创建日志收集文件
[root@master data]# touch /data/filebeat/app.log
#配置log输入console输出
#配置输入
可以配置filebeat从哪里接收读取日志等数据,例如log,redis,tcp等
#配置输出
可以配置filebeat输出位置,例如elasticsearch Logstash Kafka redis等
可以通过设置配置文件output部分中的选项将Filebeat配置为写入特定输出filebeat.yml。只能定义一个输出。
#官方filebeat配置api
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html
[root@master data]# cp filebeat.yml filebeat_console.yml
[root@master data]# vi filebeat_console.yml
# Change to true to enable this input configuration.
#设置输入类型为log,接收读取目录
enabled: true
paths:
- /data/filebeat/app.log
#设置console格式化输出结果,其他out注释掉
output.console:
pretty: true
#启动filebeat,-c指定要加载的配置文件
[root@master filebeat]./filebeat -c filebeat_console.yml
#测试数据输入到指定目录,filebeat已收集并json显示
[root@master data]# echo "123" >> /data/filebeat/app.log
[root@master filebeat]# ./filebeat -c filebeat_console.yml
{
"@timestamp": "2019-08-21T04:00:47.714Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.6.1"
"message": "123",
"source": "/data/filebeat/app.log",
"prospector": {
"type": "log"
}
#nohup后台启动
[root@master filebeat]nohup ./filebeat -c filebeat_console.yml >/dev/null 2>&1 &
#源码编译安装redis
[root@master app]# yum install -y open-ssl-devel gcc glibc gcc-c*
[root@master app]# wget http://download.redis.io/releases/redis-2.8.12.tar.gz
[root@master app]# ln -s redis-2.8.12/ redis
[root@master redis]# make MALLOC=libc
[root@master src]# cd src/
[root@master src]# make install PREFIX=/usr/local/redis
#配置
为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件夹中
[root@master redis]# mkdir -p /usr/local/redis/etc
[root@master redis]# cp redis.conf /usr/local/redis/etc/
[root@master redis]# cp mkreleasehdr.sh redis-benchmark redischeck-aof redis-cli redis-sentinel redis-server /usr/local/redis/bin/
#启动redis
[root@master src]# cd /usr/local/redis/
[root@master bin]# ./redis-server
#创建一个索引,查询测试redis是否正常可用
[root@master redis]# bin/redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set man "haha"
OK
127.0.0.1:6379> keys *
1) "man"
127.0.0.1:6379> get man
"haha"
#之前已配置console输出方式,改为redis输出,输入目录之前已配置好
[root@master filebeat]# cp filebeat_console.yml filebeat_redis.yml
[root@master filebeat]# vi filebeat_redis.yml#================================ Outputs-redis ==============================
output.redis:
hosts: ["192.168.198.136"]
key: "filebeat"
db: 0
timeout: 5
#启动filebeat和redis
[root@master filebeat]# nohup ./filebeat -c filebeat_redis.yml >/dev/null 2>&1 &
[root@master redis]# bin/redis-server
#测试两条数据写入app.log,该日志文件被filebeat采集后输出到redis,所有我们要看redis
#是否会同步这两条测试数据,如果同步,说明日志->filebear->redis是通的
[root@master redis]# echo "456" >> /data/filebeat/app.log
[root@master redis]# echo "789" >> /data/filebeat/app.log
[root@master redis]# bin/redis-cli
127.0.0.1:6379> keys *
1) "filebeat"
127.0.0.1:6379> llen filebeat
(integer) 2
127.0.0.1:6379> rpop filebeat
"{\"@timestamp\":\"2019-08-21T06:38:13.015Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"doc\",\"version\":\"6.6.1\"},\"source\":\"/data/filebeat/app.log\",\"offset\":8,\"log\":{\"file\":{\"path\":\"/data/filebeat/app.log\"}},\"message\":\"789\",\"input\":{\"type\":\"log\"},\"prospector\":{\"type\":\"log\"},\"beat\":{\"hostname\":\"master\",\"version\":\"6.6.1\",\"name\":\"master\"},\"host\":{\"name\":\"master\",\"containerized\":true,\"architecture\":\"x86_64\",\"os\":{\"platform\":\"centos\",\"version\":\"6.8 (Final)\",\"family\":\"redhat\",\"name\":\"CentOS\",\"codename\":\"Final\"}}}"
#数据流通正常,ok!
见之前文章《ES集群安装配置》
#logstash安装
[root@master app]# ll | grep logstash
lrwxrwxrwx 1 root root 15 8月 21 11:33 logstash -> logstash-6.6.1/
#测试输入输出是否正常
[root@master logstash]# bin/logstash -e 'input { stdin { } } output { stdout {} }'
123
#稍等启动中。。。
[2019-08-22T06:29:08,003][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
"@timestamp" => 2019-08-21T22:29:07.103Z,
"host" => "master",
"message" => "123",
"@version" => "1"
#配置logstash,输入源配置redis,输出到es
https://www.elastic.co/guide/en/logstash/6.6/pluginsoutputs-elasticsearch.html
[root@master config]# vi redis_logstash_es.conf
input{
redis{
host => "192.168.198.136"
port => 6379
data_type => "list"
key => "filebeat"
}
}
output{
elasticsearch {
hosts => "192.168.198.136:9200"
user => "elastic"
password => "123456"
}
}
#启动运行加载redis-logstash配置文件
[root@master logstash]# bin/logstash -f config/redis_logstash_es.conf
此时,redis队列的数据会自动消费到logstash中去。
*******************************************************
把所有服务都搞起来!
*******************************************************#同步时间
ntpdate ntp1.aliyun.com
#启动filebeat[root@master filebeat]# nohup ./filebeat -c filebeat_redis.yml 2&>1 &
#启动redis
[root@master src]# sh /usr/local/redis/bin/redis-server
#启动logstash
[root@master logstash]# bin/logstash -f config/redis_logstash_es.conf
#启动es
常遇问题:es用户启动,配置文件lock,es日志等数据存放目录所有者权限
[es@smaster bin]$ ./elasticsearch -d
#启动kinaba
[root@master kinaba]$ sh /app/kibana/bin/kibana
*******************************************************
怎么判断app.log-->filebeat-->redis是通的
*******************************************************
#插入日志,发现redis已生成索引
[root@master filebeat]# echo '110.52.250.126 - - [24/Apr/2019:17:38:20 +0800] "GET /data/cache/style_1_widthauto.css?y7a HTTP/1.1" 200 1292' >app.log[root@master bin]# ./redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> keys *
1) "filebeat"
*******************************************************
最终怎么判断呢?搞两条日志,看看最后能不能kibana显示出来就好了
*******************************************************
http://192.168.198.136:9200/_cluster/health?pretty
http://192.168.198.138:9200/
http://192.168.198.136:5601
Monitoring:监控ElasticSearch集群
Discovery:数据检索