部署ELK日志分析系统

原理解释

ELK实际上是三个技术

Elasticsearch: 相等一个日志的搜索引擎,负责对日志的索引,存储

Logstash:用于日志的收集,可以对数据处理,并输出给Elasticsearch

Kibana:Elasticsearch把数据输出给,Kibana,Kibana负责把日志数据,变为图形界面并通过web页面显示出来

案例实施

实验环境

节点1 192.168.100.102 主机名:node1 服务: Elasticsearch,logstash, kibana

节点2 192.168.100.103 主机名:node2 服务 :Elasticsearch

apache服务器 192.168.100.104 主机名:随意 服务:logstash,apache

系统均为centos7,vm网络为vm1

node1 和 node2 的内存应都给大于 3G

需要的软件包,请自行准备

环境准备

1)在两个ELK节点中配置主机名,并配置域名解析

进入100.102中
[root@CentOS7-02 ~]# vim /etc/hostname (删除原来的)
node1
[root@CentOS7-02 ~]# reboot
[root@node1 ~]# vim /etc/hosts (在下面添加如下)
192.168.100.102 node1
192.168.100.103 node2

然后100.103node2中的操作,除了 hostname主机名改为node2 外,hosts与100.102中一样

改完主机名,一定要reboot重启,然后apache 100.1004不用改

2)检查node1,node2 JAVA环境

node1 100.102中,挂载系统光盘,配置yum
[root@node1 ~]# yum -y install java*
[root@node1 ~]# java -version (出现如下,就对了)
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

在node2 100.103中操作一致,

部署 Elasticsearch

在node1,和node2 节点都需要部署 Elasticserach软件,我这里以node1节点为例 ,node2操作都一模一样

进入node1 100.102中

1)安装 Elasticsearch

rpm包拖入,Xshell中
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm

2)加载系统服务

[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch

3)更改Elasticsearch配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
(这里面的都是注释的,你可以把如下的添加到最后,也可以修改下面的配置项和我下面一样,#后的是解释,不用打)
cluster.name: my-application #群集名字,一会node2也要一样
node.name: node1 #节点名称,一会node2中写node2
path.data: /data/elk_data #数据存放路径
path.logs: /var/log/elasticsearch #日志存放路径
bootstrap.memory_lock: false #启动时不锁内存
network.host: 0.0.0.0 #服务绑定地址,0.0.0.0表示所有
http.port: 9200 #端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] #群集成员,这里写的是主机名

保存退出

4)创建数据存放路径并授权

[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/

5)启动Elasticsearch并查看是否启动成功

[root@node1 ~]# systemctl start elasticsearch.service (这个服务启动的特别慢,命令执行完成后,需要等半分钟或一分钟,才可以看到端口号)
[root@node1 ~]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 1550/java

6)这5小步记得node2 100.104中的也要操作,除了配置文件中的的一个变了,其他的操作都一模一样
7)查看节点信息

浏览器,http://192.168.100.102:9200/
显示node1 的信息,如下
在这里插入图片描述
浏览器输入 http://192.168.100.102:9200/_cluster/health?pretty
查看群集状态, status:green 表示节点健康运行
在这里插入图片描述
当然你也可,查看node2的,把ip换为192.168.100.103即可,效果差不多,我这里不演示了

因为上面的查看群集状态并不友好,可以通过安装Elasticsearch-head插件

安装 Elasticsearch-head插件

安装这个插件,只需在一个节点上,本例以 node1 100.102为例
进入node1 100.102中
1)编译安装node(是-head工具的环境包),时间会很长,耐心等待

[root@node1 ~]# tar zxf node-v8.2.1.tar.gz
[root@node1 ~]# cd node-v8.2.1
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make && make install

2)安装phantomjs (是上面-head工具的插件)

拖入包
[root@node1 ~]# tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 /]# cd /usr/local/src/
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/

3)安装Elasticsearch-head

拖入包
[root@node1 ~]# tar zxf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head
[root@node1 elasticsearch-head]# npm install (安装依赖包,会出来多少s就对了)

4)更改Elasticsearch主配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml (在最后添加如下两句)
http.cors.enabled: true #开启跨域访问支持,默认是false
http.cors.allow-origin: "*" #跨域访问允许的域名地址
[root@node1 ~]# systemctl restart elasticsearch

5)启动服务,需要在解压后的 elasticsearch-head目录下,进程会读取该目录下的文件, 否则会启动失败

这个插件是个单独的服务,端口号为9100
[root@node1 ~]# cd /root/elasticsearch-head
[root@node1 elasticsearch-head]# npm run start & (&后台运行,要不会占用命令行)
[1] 63598 (出现这个后等待,不要做任何操作,一会出现如下)
[root@node1 elasticsearch-head]#
> [email protected] start /root/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100 (出现这个后,直接回车)

[root@node1 elasticsearch-head]# netstat -anpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 63608/grunt
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200 (elasticsearch服务端口)
tcp6 0 0 :::9200 :::* LISTEN 63490/java

6)通过插件,通过浏览器,访问http://192.168.100.102:9100/
如果你安在了,node2就是把网址ip换成100.103,当然两个节点也可以都安装

效果如下,注意看如下的图,要不会连不上的
在这里插入图片描述

7)插入索引,通过命令,然后查看

在node1 100.102中操作,
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello word"}'
(执行成功后,会输出一些东西就对了)

回到,刚刚的插件web页面查看,已经有了,记得要刷新页面
在这里插入图片描述

Logstash安装及使用方法

Logstash一般部署要监控其日志的服务器中,本例中,应该部署在apche 100.104服务器中,

在正式部署之前,先在node1部署Logstash,熟悉Logstash使用方法,需要java环境
前面已经安装过了

进入node1 100.102中
1)在node1上安装Logstash

包拖入
[root@node1 ~]# rpm -ivh logstash-5.5.1.rpm (会有点慢,等待)
[root@node1 ~]# systemctl start logstash
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

2)测试Logstash

[root@node1 ~]# logstash -e 'input { stdin{} } output { stdout{} }'
(注意看下面的图)
在这里插入图片描述
[root@node1 ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>>rubydebug } }'
注意看下面图片

在这里插入图片描述
[root@node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch {hosts=>["192.168.100.102:9200"] } }
在这里插入图片描述
回到 Elasticsearch WEB界面中查看,刚刚的索引
在这里插入图片描述
然后数据,如下
在这里插入图片描述

3)Logstash配置文件

下面通过修改 Logstash配置文件,让其收集系统日志/var/log/messages ,输出到Elasticsearch中
[root@node1 ~]# chmod o+r /var/log/messages (让所有人可读,给logstash权限)
[root@node1 ~]# ll /var/log/messages
-rw----r--. 1 root root 1003927 11月 3 17:37 /var/log/messages
[root@node1 ~]# touch /etc/logstash/conf.d/system.conf
[root@node1 ~]# vim /etc/logstash/conf.d/system.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.100.102:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}

#保存退出,关于上面配置项的作用我后面会详细说
[root@node1 ~]# systemctl restart logstash

通过Elasticsearch web页面可以看到,
在这里插入图片描述

安装 Kibana

在node1 100.102中安装kibana,当然也可以安装到别的,哪台都可以

包拖入,

1)在node1安装Kibana,设置开机自启

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 ~]# systemctl enable kibana.service

2)设置 Kibana的主配置文件

[root@node1 ~]# vim /etc/kibana/kibana.yml (下面的项都是注释的,删掉#,并改为下面)
server.port: 5601 #kibana端口
server.host: "0.0.0.0" #kibana监听地址
elasticsearch.url: "http://192.168.100.102:9200" #和Elasticsearch建立连接
kibana.index: ".kibana" #添加.kibana索引,在Elasticsearch中

3)启动服务

[root@node1 ~]# systemctl start kibana

4)验证 Kibana,浏览器访问http://192.168.100.102:5601/

第一次会让添加一个,索引,添加前面的创建的索引,如下
在这里插入图片描述
点了,之后会出来,一些打勾的,那些是索引默认字段,这里就不展示了

然后查看数据,需要时间,查看node1的时间
[root@node1 ~]# date
2019年 11月 03日 星期日 18:58:57 CST

查看数据,默认可能会这样
在这里插入图片描述
调一下,查看的时间就可以了,如下在这里插入图片描述
数据图如下

在这里插入图片描述

配置apache服务器,并监控数据

刚刚只是熟悉Logstash的用法,这里才是真正的监控

进入192.168.100.104 中操作

安装Logstash,以便将收集的日志发送的到Elasticsearch

1)安装httpd服务,和Logstash,而且需要java环境

挂载光盘,并配置yum,把logastash包拖入
[root@centos7-04 ~]# yum -y install httpd
[root@centos7-04 ~]# yum -y install java*
[root@centos7-04 ~]# java -version
[root@centos7-04 ~]# rpm -ivh logstash-5.5.1.rpm
[root@centos7-04 ~]# systemctl daemon-reload
[root@centos7-04 ~]# systemctl enable logstash

2)编写Logstash配置文件,apache_log.conf,

[root@centos7-04 ~]# cd /etc/logstash/conf.d/
[root@centos7-04 conf.d]# touch apache_log.conf
[root@centos7-04 conf.d]# vim apache_log.conf
按我下图打,我后面有打好的,你可以直接复制
在这里插入图片描述
input {
file {
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file {
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.100.102:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.100.102:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}

[root@centos7-04 conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf &
(虽然,是后台运行,还是会输出信息,运行完这条命名后,等待,会输出一堆东西,等到,输出下面这句话后,然后回车)
logstash.agent - Successfully started Logstash API endpoint {:port=>9600}

3)访问测试

回到浏览器,elast~ -head插件 web页面,刷新页面
在这里插入图片描述
再回到刚刚的Kibana页面中
然后,添加索引

在这里插入图片描述
然后添加
在这里插入图片描述
以相同的方法,添加如下这个
apache_error-*

然后,启动httpd服务,并访问,并查看数据图

[root@centos7-04 ~]# systemctl restart httpd

然后浏览器,访问网址http://192.168.100.104/,并多刷新几次

回到,Kibana web页面,查看数据

如下
在这里插入图片描述
查看刚刚创建的索引
在这里插入图片描述

实验完毕 !

发布了54 篇原创文章 · 获赞 57 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45308292/article/details/102873814