本文已独家授权给微信公众号【逻魔代码】
1. 问题背景
在linux(CentOS7)环境下,如何搭建一套elk系统?
elk 安装包
elasticsearch-7.8.0-x86_64.rpm + kibana-7.8.0-x86_64.rpm + logst
如下图
CentOS 7
CentOS 7.4 64bit, 图略。
说明
实际上熟悉了docker的用法之后,使用docker和不使用docker差别不大,篇幅所限,只记录重点,不涉及docker环境下的安装和配置。
注:里面提到的所有操作都是我亲测过的。
2. 安装(es 和 kibana)
1. 安装es
- rpm -ivh xxx.rpm
安装完毕后,需要配置内容。
尤其是需要配置es可以从远程机器访问
。
配置后启动,效果如下图。
要点:
- es依赖java环境,所以先安装
jdk
,自行解决。- es安装完成后,可能需要修改配置文件,如端口等
- es启动时可能会报错,如
can not run elasticsearch as root
(新建其他用户,并配置各个目录权限即可解决,一搜即得)等,需要处理max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
这个报错需要配置一下,参考这两个即可解惑。https://www.jianshu.com/p/692608b3b6f9 https://blog.csdn.net/weixin_40143280/article/details/105273199
2. 安装kibana
- rpm -ivh xxx.rpm
安装完毕后,需要配置内容。
尤其是需要配置kibana可以从远程机器访问
。
配置后启动,效果如下图。
其中遇到一个报错,解决办法:The Reporting plugin encountered issues launching Chromium in a self-test
启动后效果如图
启动过程如图:
我安装的kibana启动比较顺利。
/usr/share/kibana --allow-root
就成功了,有一些WARN
信息,但无所谓。
当然地,如果不喜欢控制台的输出信息,可以这样: nohup bin/kibana --allow-root &
关键部分暂时部署完成,目标是通过.net 或 java 或logstash的方式 将数据存入es,然后在kibana可以灵活展示和使用
此时kibana可以直接连接到刚才部署的es上面,看和操作es的一些index。
3. 使用
自己的思路:
- 只先安装es和kibana,es用来存数据(姑且可以先用kibana的 示例数据,或者 通过csv文件导入的数据来玩,暂不考虑如何向es中导入数据的问题)
- 使用kibana自带的sample数据或自己导入的数据,熟悉
dashboard
、cavans
、visulize
等的概念,做到大致了解,心中有数。可以产生各种灵活的饼图柱状图折线图热力图之类的东西自己玩。
如下图:
4. logstash的安装与使用
安装
- rpm -ivh xxx.rpm
安装完毕后,需要配置内容,然后启动。
当然,启动报错是很正常的,遇到什么解决什么,见招拆招就行了。
跟前面的es和kibana一样,安装完成后,/usr/share/logstash
和 /etc/logstash
处出现文件。
使用logstash
我现在的目的是,通过logstash,不断地从一个mysql表中读数据,写入es的一个索引中。
如图,画横线的两个conf文件就是我的两次导入需要的配置文件,内容仿照logstash-sample.conf
的格式,使用mysql数据源,如ph3.conf
内容如下:
input {
jdbc {
# jdbc_driver_library => "./mysql-connector-java-5.1.49.jar"
jdbc_driver_library => "/usr/share/logstash/mylib/5.1.45/mysql-connector-java-5.1.45.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://1.2.3.4:13308/test?characterEncoding=UTF-8&useSSL=false"
jdbc_user => root
jdbc_password => 123456
jdbc_paging_enabled => "true" #是否进行分页
# jdbc_page_size => "50000"
tracking_column => "id"
use_column_value => true
# statement_filepath => "sql文件路径,与下面的执行语句二选1"
statement => "SELECT * FROM ph3 where id > 0 "
# 设置监听间隔 各字段含义(由左至右)秒、分、时、天、月、年,全部为*默认含义为每分钟都更新
# schedule => " 10 * * * * *"
schedule => "5 * * * * *"
}
}
output {
elasticsearch {
document_id => "%{id}"
# document_type => ""
index => "ph4-new-index"
hosts => ["localhost:9200"]
}
stdout{
codec => rubydebug
}
}
然后执行命令,启动logstash进程去完成这件事:
sudo bin/logstash -f /etc/logstash/ph3.conf --path.settings=/etc/logstash
命令内容:
-f 指定了配置文件
–path.settings 指定一个目录,用到一些其他的通用配置,不用管。
可能遇到一些报错,如提示找不到 logstash.yml 文件, --path.settings 指向的不是一个目录,权限不足等,都是网上一搜就能解决的。
其中特别注意, tracking_column => "id"
这一行 和 document_id => "%{id}"
这行要体会一下意思,以免导入程序跑了半天数据库里只有1个document。
这个问题可能会遇到,遇到也好解决,一搜就有。就是这个id字段不是随便写的,需要是mysql数据库的表里的字段,可以作为唯一标识的那种,比如int主键。
以下上个启动图。
如图,红框部分就是任务已经开始执行起来了。
然后在kibana网页的索引模式
里面,就可以把这个索引加入到kibana管理里了,然后就可以跟其他数据一样随意操作。
自此这条路就完全打通了。
即:
elk都安装且运行正常的情况下,
logstash 从mysql等数据源按照cron表达式确定的时间持续地从mysql中读取数据 ==> 把数据写入到es中 ==> kibana管理这些数据,可以自定义出各种花样繁多的统计图统计表,导出统计数据等
以后就很随意了。