系统现在分为好多部分,面对不同的服务,又接受不同的服务。
bug联查确实很有难度,几乎除了负责统一的我以外没人能找到真正的原因了。所以,想着能把日志监控做起来,恰好最近不是很忙,就折腾了一下ELK这个日志监测系统,结果弄了两天还没有成功。
什么,不知道什么是ELK?那就百度一下吧,哦不,谷歌一下,程序猿说百度显得不专业。
其实我之前也不知道什么是ELK,只是最近找日志系统才知道有这么个东西。
看着网上充斥着各种五分钟配置ELK,十分钟配置ELK,我真是感觉大神无处不在,为什么我就弄不成功呢?
好了,不多说了,开始讲具体实施的过程吧。
看起来这个工程更新迭代还挺快,2015年的帖子介绍的还是1.x.x,现在都已经5.x.x版本了,有很多功能和特性都发生了变化,配置起来也不一样了。
kibana 和 elasticsearch下载地址
https://www.elastic.co/products
logstash下载地址
https://www.elastic.co/downloads/logstash
服务测试机:
126.32.22.94
日志采集机器:
126.32.24.195
JDK版本1.7(这是个坑,5.x.x版本都只能用1.8的JDK)
版本:
kibana-5.0.0 x86_64
logstash-5.2.2
elasticsearch-5.0.0
redis地址:
126.32.24.194 db11
安装elasticsearch
1.下载tar.gz到目录/data/xxx/logMonitor/elasticsearch
解压:tar -zxvf -----.tar.gz
进入bin目录,尝试安装head,结果遇到jdk版本问题,暂时跳过
./elasticsearch-plugin -install mobz/elasticsearch-head
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/elasticsearch/plugins/PluginCli : Unsupported major.minor version 52.0
启动,依然是在bin目录下
nohup ./elasticsearch -Des.insecure.allow.root=true >/data/xxx/logMonitor/elasticsearch/nohup.log 2>&1 &
得到进程号3745,ps看一下,结果没找到,看来启动不成功。check了一下log,看来还是jdk问题
下载了1.8版本的jdk
jdk-8u121-linux-x64.rpm
上传到/usr/local/src
安装rpm rpm -ivh jdk-8u121-linux-x64.rpm
安装完成后在/usr/java/目录下面会有jdk。。。。
配置环境变量
vim /etc/profile
在末尾增加下面内容
export JAVA_HOME=/usr/java/jdk1.8.0_121
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后执行 source /etc/profile让配置生效
重新试试安装head plugin
这时候成功了 ,启动elasticsearch
输出有这么一个错误,然后退出了
ERROR: D is not a recognized option
这个命令已经不能用了吗?
只好退出root,用我的用户twoeggs(二蛋)来操作
还得重新加载一下jdk
使用root chown -R twoeggs /data/xxx/logMonitor 给用户twoeggs赋权限
然后切换到用户twoeggs
启动 nohup ./bin/elasticsearch > nohup.log &
看日志还有个警告
[WARN ][o.e.b.JNANatives ] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5 with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
但是输入测试,是有结果的,所以那个警告先放一放
curl -X GET http://localhost:9200/
{
"name" : "uCelUQO",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "aDfiyryqQbaYs68VJza74Q",
"version" : {
"number" : "5.0.0",
"build_hash" : "253032b",
"build_date" : "2016-10-26T04:37:51.531Z",
"build_snapshot" : false,
"lucene_version" : "6.2.0"
},
"tagline" : "You Know, for Search"
}
好了,下一步。开始安装kibana
进入目录logMonitor/kibana
解压
tar -zxvf kibana-5.0.0-linux-x86_64.tar.gz
在config/kibana.yml 中配置 search的地址,增加下面一行
elasticsearch.url:"http://localhost:9200"
启动kibana
nohup bin/kibana > ../nohup.log &
测试一下,服务确实启动了,有返回结果。但是在浏览器里却不能访问?
可能是网络问题?
curl -X GET http://localhost:5601/
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';
var hash = window.location.hash;
if (hash.length) {
window.location = hashRoute hash;
} else {
window.location = defaultRoute;
}</script>
经过检查,发现时配置文件的问题,它会自动绑定到IPV6上面,需要手动改一下配置文件。
elasticsearch和kibana都需要改。
先改了elasticsearch的,在这一行改为 network.host:0.0.0.0
但是没法重新启动了,遇到了问题
ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144],
在网上查了一下 需要配置一下,使用命令
sudo sysctl -w vm.max_map_count=262144
上面这些配置都是临时性的,如果下次需要还要重新配置
然后重启,这次终于好了,在浏览器输入126.32.22.94:9200 可以收到显示信息
强势插入:
安装x-pack插件
1.安装elasticsearch的插件
sudo bin/elasticsearch-plugin install x-pack
2.安装kibana的插件
sudo bin/kibana-plugin install x-pack
ElasticSearch:
用户名:elastic
密码:changeme
登录到Kibana会发现 elastic是一个最高级别的user,拥有所有权限,其角色是superuser。
下面继续搞kibana
在配置文件中加入host:"0.0.0.0"好像不太好用,又删掉
仔细查看了kibana的配置文件,有这样一条,简单翻译一下
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
#指定Kibana服务要绑定的地址。IP地址跟主机名都可以。
# The default is 'localhost', which usually means remote machines will not be able to connect.
#默认值是“localhost”本机,这就意味着远程机器通常情况下是不能连接的。
# To allow connections from remote users, set this parameter to a non-loopback address.
#要想允许远程用户访问,就把该参数设置成非回送地址。
#server.host: "localhost"
尝试了改成0.0.0.0,和改为我的主机ip都不好使。。。再继续研究
先暂停上面的工作,先来安装logstash
把logstash上传到生产日志的服务器上响应目录
/data/xxx/logstash
解压tar -zxvf logstash...
启动,看来这个也有jdk版本问题,都需要jdk1.8
切换了jdk版本之后看起来是成功启动了
然后呢,输入下面的语句启动logstash,再输入hello world!进行测试
bin/logstash -e 'input { stdin { } } output { stdout {} }'
hello world!
启动logstash输出正常
Sending Logstash's logs to /data/hexl/logstash/logstash-5.2.2/logs which is now configured via log4j2.properties
[2017-03-14T16:25:52,665][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/data/hexl/logstash/logstash-5.2.2/data/queue"}
[2017-03-14T16:25:52,688][INFO ][logstash.agent ] No persistent UUID file found. Generating new UUID {:uuid=>"02674bd2-2d46-43fd-868d-b71108947a7d", :path=>"/data/hexl/logstash/logstash-5.2.2/data/uuid"}
[2017-03-14T16:25:52,820][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>24, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>3000}
[2017-03-14T16:25:52,856][INFO ][logstash.pipeline ] Pipeline main started
对输入进行了格式化输出:
The stdin plugin is now waiting for input:
2017-03-14T08:25:52.889Z recommend_dataparse_web195v24_sjs hello world!
[2017-03-14T16:25:52,912][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
hi
2017-03-14T08:25:58.339Z recommend_dataparse_web195v24_sjs hi
但是配置elasticsearch的连接怎么都不好使,真是要疯。
安装logstash的插件
bin/logstash-plugin install x-pack
所以,搞来搞去,还是没有成功。
我准备去读一下项目文档啦,希望能有所帮助吧。
或者谁有成功经验可以指导一下我嘛。。。
等我研究明白搭建成功了,再来重新写一篇吧~~~加油