一.ELK是什么?
1.1 ELK由来
ELK是elasticsearch,logstash,kibana 这三个工具的简称
1.2 ELK三个组件的介绍
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
要注意的是elasticsearch要和kibana的版本兼容,否则kibana会无法配合elasticsearch显示日志,比如,kibana4.5.3就无法兼容elasticsearch2.2及其以下的版本
1.3 ELK原理图
2.1 安装java
很多教程上写的都是安装openjdk,但是感觉openjdk还是Bug多多,这里就用Oracle JDK了。
ELK要求java版本比较新,所以下载的最新版本的rpm
wget http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm?AuthParam=1469771524_1517498b1a49fd5cb625bada1952bf53
rpm -ivh jdk-8u102-linux-x64.rpm
确认java安装完成
[root@centos67 ~]# java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
2.2安装elasticsearch-2.3.4.rpm
注意,这里的版本要安装的新一点,要和kibana兼容。
rpm -ivh elasticsearch-2.3.4.rpm
安装完成之后,修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
主要就是修改:
cluster.name: cluster_1 群集名字
node.name: node-1 节点名字
path.data: /path/to/data 数据目录
path.logs: /path/to/logs 日志目录
network.host: 0.0.0.0 监听地址
http.port: 9200 监听端口
创建数据和日志文件夹:
mkdir -p /path/to/data /path/to/logs
创建日志文件:
cd /path/to/logs
touch cluster_1_deprecation.log cluster_1_index_indexing_slowlog.log cluster_1_index_search_slowlog.log cluster_1.log
建立群集文件夹:
mkdir -p /path/to/data/cluster_1
最后设置这些文件和文件夹的权限。
chown -R elasticsearch.elasticsearch /path
或者chmod 777 -R path
完成这些操作之后,就可以启动elasticsearch了。(如果出错,这里大多都是文件权限问题,对应解决就行)
chkconfig --add elasticsearch
/etc/init.d/elasticsearch start
curl 127.0.0.1:9200 访问9200端口测试一下
{
"name" : "node-1",
"cluster_name" : "cluster_1",
"version" : {
"number" : "2.3.4",
"build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
"build_timestamp" : "2016-06-30T11:24:31Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"}
到此elasticsearch就已经安装完成了。
head插件提供elasticsearch可视化功能的一个插件
usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading .....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /usr/share/elasticsearch/plugins/head
安装完成后访问http://IP:9200/_plugin/head/即可看到elasticsearch的WEB管理界面
如图:
kpof是提供lasticsearch群集状态管理的一个插件(单个lasticsearch性能有限,这里先安装上kopf插件,后续再做群集)
/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
-> Installing lmenezes/elasticsearch-kopf...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ............................................................................................................................................................................................................ ......DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /usr/share/elasticsearch/plugins/kopf
安装完成后访问:
http://IP:9200/_plugin/kopf/即可打开群集的WEB管理界面
2.3 安装logstash
https://www.elastic.co/guide/en/logstash/current/installing-logstash.html 官网地址
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
安装完成的logstash在目录/opt下[root@ELK-C-02-47 ~]# ll /opt/
总用量 8
drwxr-xr-x 5 logstash logstash 4096 5月 25 23:03 logstash
-e参数:执行
input:输入
output:输出
-d参数:daemon模式,后台启动(守护进程)
[root@ELK-C-02-47 ~]# /opt/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{} }‘
Settings: Default pipeline workers: 1
Pipeline main started
hello world
2016-05-25T15:15:22.035Z ELK-C-02-47 hello world
这里可以看出来 输入(logstash收集)到什么内容,logstach 就会格式化的输出一些内容。
我们可以把日志文件让logstach收集到,然后输出到elasticsearch ,再通过kibana展示elasticsearch的内容,这就是ELK的原理。
https://www.elastic.co/guide/en/kibana/current/setup.html 官网地址
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/kibana.repo
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
yum install kibana
vim /opt/kibana/config/kibana.yml
[root@ELK-C-01-46 config]# grep ‘^[a-z]‘ /opt/kibana/config/kibana.yml
server.port: 5601 端口
server.host: "0.0.0.0" 本地监听地址
elasticsearch.url: "http://10.0.0.130:9200" elasticsearch的地址
kibana.index: ".kibana"
保存退出后启动kibana:
/etc/init.d/kibana start置文件
查看是否监听端口
[root@centos67 ~]# netstat -anpt | grep 5601
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 3621/node
到此,ELK环境就已经部署完成了
三.收集本机日志
在浏览器访问kibana:http://IP:5601就可以看到kibana的页面了
登录之后,首先配置一个索引,默认kibana的数据被指向Elasticsearch,使用默认的logstash-*的索引名称,并且是基于时间(@timestamp)的,如下
点击“Create”,看到如下界面说明索引创建完成。
点击“Discover”,可以搜索和浏览Elasticsearch中的数据,默认搜索的是最近15分钟的数据,可以自定义选择时间。
3.2 收集本地系统日志
将logstash配置为索引器,并将logstash的日志数据存储到Elasticsearch,本范例主要是索引本地系统日志
#cd /usr/local/logstash/config 路径无所谓
#vim logstash-indexer.conf
input {
file {
type => "syslog"
path => ["/var/log/messages", "/var/log/secure" ] 收集/var/log/messages 和secure这两个日志
}
syslog {
type => "syslog"
port => "5544"
}
}
output {
elasticsearch { hosts => "10.0.0.130:9200" } 输出到Elasticsearch
stdout { codec => rubydebug }
}
测试是否有语法错误:
#/usr/local/logstash/bin/logstash --configtest -f logstash-indexer.conf
Configuration OK
启动
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-indexer.conf &
测试echo一条日志信息到/var/log/messages,然后再通过kibana界面查看
#echo "`date` This is a test for logstash for indexer" >> /var/log/messages
如下图:
测试从一台服务器(ip为10.0.18.12)登录到10.0.0.130
#ssh root@10.0.0.130
The authenticity of host ‘10.0.90.24 (10.0.90.24)‘ can‘t be established.
RSA key fingerprint is 4b:97:0a:97:e8:cf:a5:39:49:6c:65:8e:32:79:64:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.90.24‘ (RSA) to the list of known hosts.
root@10.0.0.130s password: --输入10.0.0.130服务器的root密码
Last login: Fri Apr 1 17:31:32 2016 from 10.0.90.8
然后查看kibana,看是否搜集到了日志
然后到kibana界面刷新下,就可以看到日志信息了。
以上表示搜集日志成功。
收集多个日志,开启多个logstash进程即可
/opt/logstash/bin/logstash -f ./logstash-indexer.conf & 收集/var/log/secure和message
/opt/logstash/bin/logstash -f ./logstash-http.conf & 收集Apache的访问日志
logstash-indexer.conf文件内容:
input {
file {
type => "syslog"
path => ["/var/log/messages","/var/log/secure"]
}
syslog {
type => "syslog"
port => "5544"
}
}
output {
elasticsearch {hosts => "10.0.0.130"}
stdout { codec => rubydebug }
}
logstash-http.conf文件内容:input {
file {
path => "/var/log/httpd/access_log"
codec => "json"
}
}
output {
elasticsearch {
hosts => ["10.0.0.130:9200"]
index => "http-access-log-%{+YYYY.MM.dd.HH}"
workers =>5
template_overwrite => true
}
}
这两个附件是收集两个日志所需要的配置文件 ,收集不同的日志,所写的配置文件都有所不同。
四、收集其它主机的日志
收集其它主机的日志的时候,只需要安装上logstach,通过logstach对日志进行收集和输出到elasticsearch即可
Client的IP是10.0.0.129,安装配置了httpd服务
4.1 安装jdk
# rpm -ivh jdk-8u77-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk1.8.0_77 ########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
jfxrt.jar...
测试jdk安装是否成功
#java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
表示安装OK
4.2 安装logstash
方法同上,就不写了。
4.3 同步时间
yum -y insall ntpdate
ntpdate cn.ntp.org.cn
客户端的时间要保证和ELK服务端的时间一致,否则会出现Kibana上无法显示数据的情况
4.4运行logstach
/opt/logstash/bin/logstash -f logstash-http.conf
这里监控的还是Apache的访问日志,还是之前那个配置文件。可以新建一个索引 但是这里就用之前个索引了。(我这样做是不合适的。不同主机用一个索引很不好,因为那样会不知道日志信息是哪台主机的,建立索引可以根据主机名来建立。)
总结:收集一个日志的流程:
1.在Kibana上面建立索引
2.编写logstach配置文件
3.开启一个logstach进程,并指定配置文件
单个elasticsearch性能有限,而且无法实现数据冗余,这时候,就需要配置群集了。
5.1 在节点2上同样安装elasticsearch
(所有节点都要安装head和kopf插件) 步骤同上
5.2 在节点1(原ELK服务器)上修改配置文件。
其它的保持不变,添加这两行:
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["10.0.0.130", "10.0.0.128"]
这里也就是两个节点的IP
5.3 在节点2上修改配置文件(elasticsearch群集节点)
cluster.name: cluster_1 群集名字要和节点1相同
node.name: node-2 节点名字 不能重复了
path.data: /path/to/data 数据目录
path.logs: /path/to/logs 日志目录
network.host: 0.0.0.0 监听地址
http.port: 9200
discovery.zen.ping.multicast.enabled: true
discovery.zen.ping.unicast.hosts: ["10.0.0.130","10.0.0.128"]
5.4重启所有节点
重启完成后访问:http://IP:9200/_plugin/kopf/ 即可跳转到cluster界面
1.@centos ~]# /etc/init.d/elasticsearch restart
到这里,ELK的部署、基本日志监控、群集都部署完成了,但是到这也只是一个入门,深入的话,需要理解logstach配置文件书写方法。后来会补上,未完待续。。。
感觉51cto图片显示好奇葩,,,尤其是上面
本文出自 “唐家强” 博客,请务必保留此出处http://tangtangit.blog.51cto.com/10662825/1831847
原文:http://tangtangit.blog.51cto.com/10662825/1831847