案例实施
- 配置ELK日志分析群集。
- 使用logstash收集日志。
- 使用Kibana查看分析日志。
1.在两个ELK节点上配置域名解析,通过本地/etc/hosts文件实现。node1上的配置: [root@localhost ~]# vim /etc/hostname node1 [root@localhost ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.8.134 node1 192.168.8.136 node2
node2上的配置:
[root@localhost ~]# vim /etc/hostname
node2
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.134 node1
192.168.8.136 node2
- 以上更改完需要重启reboot
2.部署Elasticsearch软件。
所需ELK安装包:链接https://pan.baidu.com/s/17cHU4XY9q1i90Z6ywRDFjg
提取码:k43i
1)安装Elasticsearch软件
Elasticsearch软件可以通过RPM安装,YUM安装或者源码包安装,生产环境中用户可以根据实际情况进行安装方式的选择。本人用的是RPM进行安装。
[root@node1 media]# rpm -ivh elasticsearch-5.5.0.rpm
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
elasticsearch-0:5.5.0-1 ################################# [100%]
NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
2)加载系统服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
3)更改Elasticsearch主配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster //群集名字
node.name: node-1 //节点名字
path.data: /data/elk_data //数据存放路径
path.logs: /var/log/elasticsearch/ //日志存放路径
bootstrap.memory_lock: false //在启动时侯不锁定内存
network.host: 0.0.0.0 //提供服务绑定的ip地址,0.0.0.0代表所有地址
http.port: 9200 //侦听端口为9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"] //群集发现通过单播实现
- 以上都为更改的需去掉“#“
4)创建数据存放路径并授权
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
[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 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 4072/java
- 这里需要注意了node2的配置跟node1的配置基本相同,但是更改Elasticsearch主配置文件时其中的节点名字应更改为node2
7)查看群集的健康情况,可以看见status值为green(绿色),表示节点健康运行
-
通过以上方式查看群集的状态对用户并不太友好,可以通过Elasticsearch-head插件,可以更方便的管理群集。
1.1安装Elasticsearch-head插件
1)编译安装node。编译安装node耗时较长,大约40min,根据机器的配置可能略有不同,请耐心等待
[root@node1 media]# tar zxvf node-v8.2.1.tar.gz -C /usr/src [root@node1 media]# cd /usr/src/node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure && make && make install
2)安装phantomjs
[root@node1 node-v8.2.1]# cd /media/
[root@node1 media]# tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/
[root@node1 media]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin/
3)安装Elasticsearch-head
[root@node1 media]# tar xvzf elasticsearch-head.tar.gz -C /usr/src/
[root@node1 media]# cd /usr/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install //安装依赖包
4)修改Elasticsearch主配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true //开启跨域访问支持
http.cors.allow-origin: "*" //跨域访问允许的域名地址 两段http.cors都为添加上去的
[root@node1 ~]# systemctl restart elasticsearch.service //重启服务
5)启动服务。必须在解压后的elasticsarch-head目录下启动服务,进程会读取该目录下的grunfile.js文件。elasticsearch-head监听端口是9100,通过该端口是否监听来判断服务是否正常开启。
[root@node1 elasticsearch-head]# npm run start &
[1] 50445
[root@node1 elasticsearch-head]#
> [email protected] start /usr/src/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 50458/grunt
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 50290/java
6)通过Elaticsearch-head查看Elaticsearch信息。通过访问浏览器http://192.168.8.134:9100/并连接群集,如图所示。
7)插入索引。通过命令插入一个测试索引,通过输出信息可以看见索引为index-demo,类型为test。
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
刷新浏览器,可以看到创建成功的索引,如图所示。
选择“概览”选项卡,还可以看见索引默认被分片成5个,且存在一个副本,如图所示。
1.2Logstash安装及使用方法
logstash一般部署在需要监控其日志的服务器中,在本案例中,logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elaticsearch中。在正式部署之前,先在node1上部署Logstash,以熟悉logstash 的使用方法。logstash也需要java环境,所以在安装之前也需要检查当前机器的java环境是否存在。
1)在node1上安装logstash
[root@node1 media]# rpm -ivh logstash-5.5.1.rpm
警告:logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:logstash-1:5.5.1-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@node1 ~]# systemctl start logstash.service
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
2)测试logstash。logstash命令行中常用的命令选项如下
- -f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash。
- -e:后面跟着字符串,该字符串可以被当作logstash的配置
- -t:测试配置文件是否正确,然后退出。
logstash命令的使用方法:[root@node1 ~]# logstash -e 'input { stdin{}} output { stdout{} }' www.baidu.com //键入内容 2019-10-10T05:00:36.651Z node1 www.baidu.com //输出结果
[root@node1 ~]# logstash -e 'input { stdin{}} output { stdout{ codec=>rubydebug } }' www.aa.com //键入内容 { "@timestamp" => 2019-10-10T05:10:09.330Z, //输出后的结果 "@version" => "1", "host" => "node1", "message" => "www.aa.com" }
[root@node1 ~]# logstash -e 'input { stdin{}} output { elasticsearch { hosts=>["192.168.8.134:9200"]} }' www.baidu.com //键入内容 www.aa.com //键入内容
3)logstash配置文件
logstash配置文件基本由三个部分组成,input,output,filter。
下面通过修改logstash配置文件,让其收集系统日志/var/log/messages,并将其输出到elaticsearch中。
[root@node1 ~]# chmod o+r /var/log/messages
[root@node1 ~]# ll /var/log/messages
-rw----r-- 1 root root 320286 10月 10 13:23 /var/log/messages
[root@node1 ~]# touch /etc/log
login.defs logrotate.conf logrotate.d/ logstash/
[root@node1 ~]# touch /etc/log
login.defs logrotate.conf logrotate.d/ logstash/
[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.8.134:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@node1 ~]# systemctl restart logstash.service //重启logstash服务
完成后,通过浏览器查看Elasticsearch的信息,如图所示
1.3安装Kibana
1)在node1服务器上安装Kibana,并设置开机启动
[root@node1 ~]# cd /media/
[root@node1 media]# rpm -ivh kibana-5.5.1-x86_64.rpm
警告:kibana-5.5.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kibana-5.5.1-1 ################################# [100%]
[root@node1 media]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
2)设置kibana的主配置文件/etc/kibana/kibana.yml
[root@node1 ~]# vim /etc/kibana/kibana.yml
server.port: 5601 //kibana打开的端口
server.host: "0.0.0.0" //kibana侦听的地址
elasticsearch.url: "http://192.168.8.134:9200" //和Elaticsearch建立连接
kibana.index: ".kibana" //在elasticsearch中添加.kibana索引
3)启动kibana服务[root@node1 ~]# systemctl start kibana.service
4)验证kibana。通过浏览器访问http://192.168.8.134:5601,第一次登陆需要添加一个Elasticsearch索引,添加前面创建的索引实。添加前面所创建的索引system。
5)将Apache服务器的日志添加到Elaticsearch并通过kibana显示。
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl restart httpd
在Apache服务器上安装Logstash,以便将收集的日志发送到Elasticsearch中。
[root@localhost ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@localhost media]# rpm -ivh logstash-5.5.1.rpm
warning: logstash-5.5.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:logstash-1:5.5.1-1 ################################# [100%]
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
编写Logstash配置文件apache_log.conf如下。
[root@localhost ~]# cd /etc/logstash/conf.d/
[root@localhost conf.d]# touch apache_log.conf
[root@localhost 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.8.134:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error"{
elasticsearch {
hosts => ["192.168.8.134:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@localhost conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
通过访问浏览器访问http://192.168.8.134:9100查看索引是否创建成功。
登陆kibana,单击“create lndex Pattern”按钮添加索引。
在索引名中输入之前配置的output前缀“apache_access”,单击“create”按钮。
用相同的方法添加apache_error-索引。
选择“discover”选项卡,在中间下拉表中选择刚添加的apache_access-索引,可以查看相应的图表及日志信息,还可以根据Fields进行归类显示。