总结单机版ELK安装以及简单应用

ELK介绍

网上copy的:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好Web 界面,可以帮助汇总、分析和搜索重要数据日志。

自己的理解:
ELK是什么东西,很好理解,就是收集(L:Logstash),存储(E:Elasticsearch),可视化日志(K:Kibana)的。在前几年ELK为什么没有怎么听说,那是因为在服务器上tail -f就可以看日志,或者下载下来打开直接看。但是随着软件的不断发展,分布式,推荐系统,大数据等等,这些数据日积月累后的必然产物就诞生了。就拿分布式系统来说,日志都分布在各个node上,要查看一个bug,需要登录到服务器上看好多node上的日志,再比如调用连很长的话,在服务器上看日志,或者下载下来看日志,我只能说有可能好几天都找不出来问题所在。还有登陆到服务器上,是一个很危险的信号,万一rm -rf,就真的是从入门到删库跑路了。以上种种问题怎么解决呢?这个时候就是ELK上场了。

单机版安装

首先说明一下ELK采用最简单的一套策略(不包含FileBeat,FileBeat是一个好东西,但是这次不用):elasticsearch 5.6.4+kibana5.2.0+logstash5.6.3,在安装过程中,问题最多的就是ES,会遇到几个问题请参考:https://www.jianshu.com/p/6d0d78be9e30【Elasticsearch安装与应用】
之前的版本是5.52,这次用的是当前最稳定的版本5.6.4

经测试,单机版ES可以存储50G的日志,前提是8G内存,ES之所以速度快,是牺牲了一定的内存和cpu的,如果必须要存储50G以上的日志,就必须用集群,一般中小型公司单机版的完全可以满足,ES一般保存近三个月的就可以了,3个月没有发现的问题,之前的就更没有意义了。但是如果要做推荐,大数据分析,行为分析等等就需要将这些十分宝贵的日志保存下来了。

准备工作

1,安装包地址:https://pan.baidu.com/s/1z6lDEYfBwLVHSW3jZcTTIQ
2,安装jdk1.8,参考:https://www.jianshu.com/p/689e8937613f

将下载的jdk上传到服务器并解压
tar -zxvf jdk-8u161-linux-x64.tar.gz -C app/
配置环境变量
sudo vi /etc/profile
在末尾加上
export JAVA_HOME=/home/songlj/app/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
生效:source /etc/profile
测试是否安装成功java -version

安装ES

1,解压 tar -zxvf elasticsearch-5.6.4.tar.gz
2,修改配置文件,让外网能访问

cd elasticsearch-5.6.4
cd config/
vi elasticsearch.yml
network.host: 0.0.0.0

3,启动ES,不要用root启动
进入到bin目录下执行

./elasticsearch

4,会出现的错误信息,及修改办法:
for elasticsearch process is too low, increase to at least [65536]
修改办法,末尾添加:

vi /etc/security/limits.conf
注意:请将songlj修改为你对应的登陆的用户名
songlj hard nofile 65536
songlj soft nofile 65536

[1024] for user [apps] is too low, increase to at least [2048]
修改办法:vi /etc/security/limits.d/20-nproc.conf

将
* soft nproc 1024
#修改为
* soft nproc 2048

nt [65530] likely too low, increase to at least [262144]
修改办法:vi /etc/sysctl.conf

添加下面配置:
vm.max_map_count=655360

修改完sysctl.conf 之后并执行命令:

sysctl -p

5,再次启动

启动成功

6,如果外网访问不了,关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

安装logstash

1,解压:tar -zxvf logstash-5.6.3.tar.gz
2,创建logstash.conf配置文件

cd logstash-5.6.3
cd config/
vi logstash.conf

下为内容

input {
     file {
        type => "log"
        path => "/home/songlj/logs/*.log"
        start_position => "beginning"
    }
}
output {
  stdout {
   codec => rubydebug { }
  }
  elasticsearch {
    hosts => "127.0.0.1"
    index => "log-%{+YYYY.MM.dd}"
  }
}

input ,filter,output三大块, 其中input是吸取logs文件下的所有log后缀的日志文件,filter是一个过滤函数,这里不用配置,output配置了导入到
hosts为127.0.0.1:9200的elasticsearch中,每天一个索引,所以可以自己设置,es速度快原因之一倒排索引
3,启动logstash
进入到bin目录下执行

./logstash -f ../config/logstash.conf

启动成功

4,测试一下,因为logstash监听的是/home/songlj/logs这个目录下的*.log文件,现在写一个文件进去,看能不能收集到


 进入到
/home/songlj/logs
echo "zhelik可以吗" >> log3.log

下面就是logstash打印出来的,可见已经收集到了,

{
      "@version" => "1",
          "host" => "localhost.localdomain",
          "path" => "/home/songlj/logs/log3.log",
    "@timestamp" => 2018-07-18T11:12:31.724Z,
       "message" => "zhelik可以吗",
          "type" => "log"
}

但是,发现

Last error: [LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError] Elasticsearch Unreachable: [http://127.0.0.1:9200/][Manticore::SocketException] 拒绝连接 (Connection refused) {:url=>http://127.0.0.1:9200/, :error_message=>"Elasticsearch Unreachable: [http://127.0.0.1:9200/][Manticore::SocketException] 拒绝连接 (Connection refused)", :error_class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError"}

说明logstash将数据插入到ES的时候报错了,因为我的ES挂了,所以可见集群的重要性

安装Kibana

1,解压
2,修改配置文件
进入到conf

vi kibana.yml
将
server.host: "localhost"
修改为
server.host: 0.0.0.0

3,启动kibana
进入到bin目录下执行

./kibana

启动成功

4,浏览器 http://192.168.112.141:5601

Kibana日志可视化

修改为log*

文件过滤

image.png

image.png

kibana提供了过滤,搜索等等好多功能,下载就测试一下,多制造点数据,会python的可以写个爬虫,爬点数据,我这里就echo几条测试一下,

echo "今天天气好晴朗,处处好风光" >> log1.log
 echo "今天天气好晴朗,处处好风光111" >> log2.log
echo "今天天气好晴朗,处处好风光222" >> log3.log

image.png

比如:日志中有业务的关键字“111”

image.png

只需在输入栏中输入想要查找的关键字,搜索就可以了,测试或者线上发现问题,告诉开发,开发直接就打开kibana,关键字搜索之后,一切都显得那么轻松了,这里还有一个就是打日志的规范,不能乱打日志,也不能少打日志,打印日志心得:

1,log要区分war debug info error这四种情况,不能都是info,否则上线之后,日志会爆炸,
2,出入口必须打印
入口:xxx系统:method=,params=
出口:xxx系统:method=,data={},time={},code={}
3,关键业务
uuid->xxx系统:event=xxx,result={},params={},msg=

扯远了,回到正题
如图,这里是可以按时间查找的,很方便

image.png

日志的详细信息,列的很清楚

image.png

学会看kibana日志详细信息

image.png

这里多说一下:host一定要区分开,因为在分布式系统中,一个微服务是要部署到多台服务器上的,有了bug,就可以从host中知道是哪一台服务器出现了问题,修改host方式:我的centos7

hostnamectl set-hostname ELK02

其中“ELK02”就是主机名。

截止到这里已经完成上峰的任务了,但是停不下来了,再来介绍一个非常好用的插件:elasticsearch-head-master
这个插件可以看ES集群中的各个节点的状态,分片信息,分片的leader等等,能更好的理解ES的存储方式

安装elasticsearch-head-master

1,下载,解压

wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip

如果wget,unzip不是内部命令,yum就可以了

yum -y install unzip/wget

2,进入cd elasticsearch-head-master,接下来的操作必须在这个文件夹里面进行,接下来的3,4,5,6步骤都在这个文件夹下进行的,很重要,要不然会出现乱七八糟的问题
3,安装node.js

curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install -y nodejs

运行 node –v可以看到版本则安装成功
4,安装grunt-cli

npm install -g grunt-cli
npm install    //如果这里卡住执行npm config set registry http://registry.cnpmjs.org

5,修改gruntfile.js

vi Gruntfile.js

添加hostname: '*',原因和之前一样让外网能访问,因为我用的是虚拟机

image.png

6,启动 elasticsearch-head-master

grunt server

7,访问一下:http://你自己的ip:9100/

image.png

点击连接,没有反应,看日志也没有,看看前端有没有错

跨域问题


很明显,跨域了,对了对了,9100到9200,跨域了,怎么修改呢,毋庸置疑,要修改9200的ES
8,关闭ES,修改配置文件vi elasticsearch.yml,添加如下信息,保存

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

9,重启ES

image.png

image.png

在这个插件中可以对ES进行CRUD很方便



作者:ROCK_杰哥
链接:https://www.jianshu.com/p/0962fb50ecff
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/micwing/article/details/87910885
今日推荐