ELK+Redis日志分析平台源码部署and收集展示日志

引言

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

ELK简介

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch(存储)、Logstash(收集)和Kiabana(搜索+统计+展示)三个开源工具组成:

1
2
3
4
5
6
7
1)ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

在elasticsearch中,所有节点的数据是均等的。

2)Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。

3) Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK工作原理展示图

P2LUHS.png

  • 如上图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

本次实验拓扑

P2LwNQ.png

1
2
3
4
5
6
说明:
1、client客户端访问公司的nginx网页服务器产生访问日志
2、nginx上的logstash客户端收集nginx产生的日志
3、logstash客户端把收集到的日志传送给logstash服务器的redis做序列
4、elastic集群存储数据
5、kibana从elastic集群中查询数据生成图表提供给管理人员查看

官网下载地址

redis下载
1
https://redis.io/download
jdk下载
1
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
elastic、logstash、kibana下载
1
https://www.elastic.co/downloads/past-releases

P2L0hj.png

软件包版本

1
2
3
4
5
redis-4.0.6.tar.gz
jdk-8u151-linux-x64.tar.gz
elasticsearch-6.1.1.tar.gz
logstash-6.1.1.tar.gz
kibana-6.1.1-linux-x86_64.tar.gz

环境部署

1
2
3
4
5
6
7
服务器IP:
192.168.10.62(客户机)
192.168.10.26(nginx服务器+logstash客户端)
192.168.10.22(logstash服务端+redis)
192.168.10.27(elasticsearch)
192.168.10.29(elasticsearch)
192.168.10.21(kibana)

Logstash,Redis,ElasticSearch,Kibana数据收集分析系统部署

redis消息队列作用说明:
1
2
3
1、防止logstash和ES(ElasticSearch)无法正常通信,从而丢失日志
2、防止日志量过大导致ES无法承受大量写操作从而丢失日志
3、应用程序(php、java)在输出日志时,可以直接输出到消息队列,从而完成日志收集

安装ElasticSearch(192.168.10.27)

1、卸载系统自带的jdk(如果有)
1
2
yum -y remove java
rpm -qa | grep java
2、安装jdk
1
2
3
4
mkdir -p /a01/apps/apps_src
cd /a01/apps/apps_src/
mkdir -p /usr/local/java
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java/
3、配置环境变量
1
2
3
4
5
6
7
8
9
vim /etc/profile

JAVA_HOME=/usr/local/java/jdk1.8.0_151
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH

source /etc/profile
java -version

P2Lr3n.png

4、创建elasticsearch用户
1
useradd elk
5、解压(Elasticsearch不需要编译,解压就可以使用)
1
2
tar -zxvf elasticsearch-6.1.1.tar.gz -C /a01/apps/
mv /a01/apps/elasticsearch-6.1.1/ /a01/apps/elasticsearch
6、修改elasticsearch配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd /a01/apps/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml

cluster.name: nongkaige-cluster #集群名称
node.name: node-1 #节点名称
path.data: /a01/apps/elasticsearch/data #数据存放路径
path.logs: /var/log/elasticsearch #日志存放路径
bootstrap.memory_lock: true #锁定内存,不使用swap分区
bootstrap.system_call_filter: false
network.host: 192.168.10.27 #IP地址
http.port: 9200 #端口号

http.cors.enabled: true
http.cors.allow-origin: "*"

node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.10.27"]
7、创建目录
1
2
3
mkdir -p /a01/apps/elasticsearch/data
mkdir -p /var/log/elasticsearch
mkdir -p /var/run/elasticsearch
8、授权
1
2
3
chown -R elk:elk /a01/apps/elasticsearch/
chown -R elk:elk /var/log/elasticsearch/
chown -R elk:elk /var/run/elasticsearch/
9、启动elasticsearch
1
2
su - elk
/a01/apps/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch/elastic.pid -d

P2Lyj0.png

报错了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ERROR: [5] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: max number of threads [1024] for user [elk] is too low, increase to at least [4096]
[4]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[5]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

最大文件描述符太低:[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

最大线程数太低:[3]: max number of threads [1024] for user [elk] is too low, increase to at least [4096]

打开虚拟内存的个数太少:[4]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

内存没有锁定:[2]: memory locking requested for elasticsearch process but memory is not locked

Centos6默认不支持SecComp:[5]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /etc/security/limits.conf
* soft nproc 4096
* hard nproc 4096
* soft nofile 65536
* hard nofile 65536
elk soft nproc 4096
elk hard nproc 4096
elk soft memlock unlimited
elk hard memlock unlimited

vim /etc/sysctl.conf
vm.max_map_count=262144

vim /a01/apps/elasticsearch/config/elasticsearch.yml

P2LcuV.png

  • sysctl -p生效,然后断开重新登陆即可
10、再来启动一次
1
2
su - elk
/a01/apps/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch/elastic.pid -d
  • -d可以先不添加,否则看不到报错等信息,可以先尝试启动成功之后再加-d

P2LgBT.png

11、开启防火墙9200、9300端口
12、浏览器访问(最好使用google浏览器):IP:9200

P2L2HU.png

安装ElasticSearch(192.168.10.29)

1、卸载系统自带的jdk(如果有)
1
2
yum -y remove java
rpm -qa | grep java
2、安装jdk
1
2
3
4
mkdir -p /a01/apps/apps_src
cd /a01/apps/apps_src/
mkdir -p /usr/local/java
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java/
3、配置环境变量
1
2
3
4
5
6
7
8
9
vim /etc/profile

JAVA_HOME=/usr/local/java/jdk1.8.0_151
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH

source /etc/profile
java -version
4、创建elasticsearch用户
1
useradd elk
5、解压(Elasticsearch不需要编译,解压就可以使用)
1
2
tar -zxvf elasticsearch-6.1.1.tar.gz -C /a01/apps/
mv /a01/apps/elasticsearch-6.1.1/ /a01/apps/elasticsearch
6、修改elasticsearch配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd /a01/apps/elasticsearch/config/
cp elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml

cluster.name: nongkaige-cluster
node.name: node-2
path.data: /a01/apps/elasticsearch/data
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 192.168.10.29
http.port: 9200

http.cors.enabled: true
http.cors.allow-origin: "*"

node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.10.27"]
7、创建目录
1
2
3
mkdir -p /a01/apps/elasticsearch/data
mkdir -p /var/log/elasticsearch
mkdir -p /var/run/elasticsearch
8、授权
1
2
3
chown -R elk:elk /a01/apps/elasticsearch/
chown -R elk:elk /var/log/elasticsearch/
chown -R elk:elk /var/run/elasticsearch/
9、修改系统参数
1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/security/limits.conf
* soft nproc 4096
* hard nproc 4096
* soft nofile 65536
* hard nofile 65536
elk soft nproc 4096
elk hard nproc 4096
elk soft memlock unlimited
elk hard memlock unlimited

vim /etc/sysctl.conf
vm.max_map_count=262144
  • sysctl -p生效,然后断开重新登陆即可
10、开启防火墙9200、9300端口
11、启动elasticsearch
1
2
su - elk
/a01/apps/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch/elastic.pid -d

P2LWEF.png

  • 上图中我们可以看到,elasticsearch已经启动成功,并且加入了集群中
12、浏览器访问(最好使用google浏览器):IP:9200

P2LfN4.png

检测Elasticsearch集群状态

浏览器访问:

  • IP:9200/_cluster/health?pretty

P2LI3R.png

安装Logstash服务端+Redis(192.168.10.22)

1、安装Redis
1
2
3
4
5
mkdir -p /a01/apps/apps_src
cd /a01/apps/apps_src/
tar -zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make
  • make成功后,会在src目录下多出一些可执行文件:redis-server、redis-cli等等,为了习惯,我创建一个redis的安装目录,并把这些可执行文件cp过去,再软链接到/usr/local/bin/下
1
2
3
4
5
mkdir -p /a01/apps/redis/bin
cd src/
cp redis-server redis-cli redis-check-aof redis-sentinel redis-trib.rb redis-benchmark redis-check-rdb /a01/apps/redis/bin/

ln -s /a01/apps/redis/bin/* /usr/local/bin/
2、创建Redis配置文件目录
1
2
3
4
mkdir -p /etc/redis
mkdir -p /a01/apps/redis/log
mkdir -p /a01/apps/redis/run
mkdir -p /a01/apps/redis/data
3、拷贝配置文件
1
cp /a01/apps/apps_src/redis-4.0.6/redis.conf /etc/redis/
4、修改配置文件
1
2
3
4
5
6
7
8
vim /etc/redis/redis.conf

bind 192.168.10.22
port 6379
daemonize yes
pidfile /a01/apps/redis/run/redis_6379.pid
logfile "/a01/apps/redis/log/access.log"
dir /a01/apps/redis/data/
5、启动Redis
1
2
redis-server /etc/redis/redis.conf
ps -aux | grep redis

P2Log1.png

6、开启防火墙6379端口
7、测试Redis
1
2
3
4
redis-cli -h 192.168.10.22
192.168.10.22:6379> ping
PONG
192.168.10.22:6379>
  • 出现PONG,证明可以使用
8、安装Logstash
  • Logstash依赖JDK,先安装JDK(和上边一样的安装方式)
1
2
tar -zxvf logstash-6.1.1.tar.gz -C /a01/apps/
mv /a01/apps/logstash-6.1.1/ /a01/apps/logstash
9、测试Logstash能否使用
1
/a01/apps/logstash/bin/logstash -e 'input { stdin { } } output {stdout {} }'

P2LTjx.png

  • 如上图,输入hello world有输出即表示Logstash可正常使用
10、防火墙开启9600端口
  • 说明:现在只是把Logstash的服务端安装上了而已,服务端的配置文件并没有写,等到后边我们验证的时候,安装Logstash客户端时,再一块写上服务端和客户端的配置文件,现在只测试Logstash能使用即可

安装Kibana(192.168.10.21)

1、解压
1
2
3
4
mkdir -p /a01/apps/apps_src
cd /a01/apps/apps_src/
tar -zxvf kibana-6.1.1-linux-x86_64.tar.gz -C /a01/apps/
mv /a01/apps/kibana-6.1.1-linux-x86_64/ /a01/apps/kibana
2、修改配置文件
1
2
3
4
5
6
vim /a01/apps/kibana/config/kibana.yml

server.port: 5601
server.host: "192.168.10.21"
elasticsearch.url: http://192.168.10.27:9200 #Elasticsearch的ip地址
kibana.index: ".kibana" #创建索引
3、测试是否启动成功
1
/a01/apps/kibana/bin/kibana

P2LbDK.png

4、开启防火墙5601端口
5、网页访问Kibana:IP:5601

P2LqHO.png

  • 这里需要注意的是,现在可以访问到kibana,但是这个时候还不能使用kibana,只有数据收集好的时候,kibana才能正常使用。

安装Logstash客户端(192.168.10.26,和服务端一样的安装)

  • Logstash依赖JDK,先安装JDK(和上边一样的安装方式)
1、解压
1
2
tar -zxvf logstash-6.1.1.tar.gz -C /a01/apps/
mv /a01/apps/logstash-6.1.1/ /a01/apps/logstash
2、测试Logstash能否使用
1
/a01/apps/logstash/bin/logstash -e 'input { stdin { } } output {stdout {} }'

P2Lj4H.png

  • 如上图,输入hello world有输出即表示Logstash可正常使用
3、防火墙开启9600端口

创建Logstash服务端和客户端的配置文件

Logstash服务端的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /a01/apps/logstash/
mkdir server_conf/
cd server_conf/
vim logstash-server-nginx.conf

input {
redis {
host => "192.168.10.22"
port => 6379
data_type => "list"
key => "nginx"
}
}
output {
elasticsearch { #Logstash输出到Elasticsearch
action => "index"
hosts => "192.168.10.27:9200" #Elasticsearch地址
index => "nginx-%{+YYYY.MM.dd}" #创建索引
}
}
Logstash客户端的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cd /a01/apps/logstash/
mkdir agent_conf/
cd agent_conf/
vim nginx-agent.conf

input {
file {
path => ["/a01/apps/nginx/log/access.log"] #日志的存放路径
type => "nginx_access"
}
}
output {
stdout {codec => rubydebug }
if [type] == "nginx_access"{
redis {
host => ["192.168.10.22:6379"] #Redis的地址
data_type=> "list"
key => "nginx"
}
}
}

配置nginx的日志格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim /etc/nginx/nginx.conf

log_format json '{"@timestamp":"$time_iso8601",'
'"@version":"1",'
'"client":"$remote_addr",'
'"url":"$uri",'
'"status":"$status",'
'"domain":"$host",'
'"host":"$server_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"referer": "$http_referer",'
'"ua": "$http_user_agent"'
'}';

access_log /a01/apps/nginx/log/access_nginx_json.log json;

测试ELK

  • 到此,所有的服务都已经安装完成,接下来是测试所有的服务是否能正常进行沟通工作,达到我们预期的效果。
  • 启动顺序:Elasticsearch–Kibana–Logstash
启动Elasticsearch(两台)
1
2
su - elk
/a01/apps/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch/elastic.pid
  • 这里为了查看信息,没有加上-d参数

P2Opvt.png

启动Kibana
1
/a01/apps/kibana/bin/kibana
启动Logstash服务端
1
/a01/apps/logstash/bin/logstash -f /a01/apps/logstash/server_conf/logstash-server-nginx.conf

P2Oib8.png

启动Logstash客户端
1
/a01/apps/logstash/bin/logstash -f /a01/apps/logstash/agent_conf/nginx-agent.conf
访问nginx产生日志,然后在Logstash客户端查看收集到的日志

P2OkVS.png

配置Kibana网页端创建index
  • 第一步: 创建index名称 (上边我们在Logstash创建的索引为index => “nginx-%{+YYYY.MM.dd}”)

P2OE5Q.png

  • 第二步

PRpVeI.png

  • 第三步:查看

PRpZwt.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%