一、ELK介绍
ELK代表的是Elasticsearch , Logstash, Kibana 。 Elasticsearch :搜索分析功能 Logstash:数据搜集,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统 Kibana :数据可视化分析
logstash抽取数据到es中,使用kibana可视化展示。由下图表示:
二、ELK搭建部署
1、环境
jdk1.8 下载地址:jdk1.8
elasticsearch-6.4.3
下载地址:elasticsearch-6.4.3.tar.gz
logstash-6.4.3 下载地址:logstash-6.4.3.tar.gz
kibana-6.4.3-linux-x86_64 下载地址:kibana-6.4.3-linux-x86_64.tar.gz
2、elasticsearch安装
准备工作
1、创建一个目录存放下载好的部署包。我这里是创建了一个elk目录/home/elk
2、创建一个用户,并授权。因为es不能用root用户启动,如果用root启动,会报错。我这里创建了一个es用户。
安装
切换es账户,解压相关压缩包
su es
tar -zxvf elasticsearch-6.4.3.tar.gz
复制代码
进入elasticsearch-6.4.3,修改配置文件
cd elasticsearch-6.4.3/config/
vim elasticsearch.yml
复制代码
将其注释去掉
cluster.name 是你的es集群的名称,如果集群式分布式要注意每节点的集群名要一样
node.name 是节点名称,可随意
network.host 0.0.0.0代表所有网络都可以访问
http.port 9200是es的默认端口
复制代码
配置完成之后,保存退出,运行启动es
cd ../bin/
./elasticsearch 后台启动为:./elasticsearch -d
复制代码
无报错,代表启动正常。 浏览器访问:http://xxxx:9200/,显示es信息。
一般遇到的错误
1、权限问题,不能用root启动,切换其他用户
2、 CONFIG_SECCOMP not compiled into kerne..
解决办法:
在配置文件上elasticsearch.yml加上
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
复制代码
3、max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决办法:
切换root用户,编辑limits.conf配置文件,命令如下:vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096 # * 可为启动es的用户
复制代码
4、max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决办法:
切换root用户,编辑90-nproc.conf配置文件,命令如下:
vi /etc/security/limits.d/90-nproc.conf
将
* soft nproc 1024
修改为
* soft nproc 2048 #这里是根据报错提示具体修改
复制代码
5、max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决办法:
切换root用户,修改配置文件sysctl.conf,命令如下:vi /etc/sysctl.conf
添加一下配置:vm.max_map_count=655360
#这里是根据报错提示具体修改数值
复制代码
配置修改完成之后,重现启动es,就可以访问链接啦!!!!!!!!!
3、Kibana安装
解压安装包,修改配置文件
#解压安装包
tar -zxvf elasticsearch-6.4.3.tar.gz
cd kibana-6.4.3-linux-x86_64/config/
vi kibana.yml
复制代码
将其注释去掉,修改自己的配置
server.port:端口
server.host:配置成0.0.0.0代表开启公网访问
elasticsearch.url:es访问的路径
复制代码
保存配置文件,启动kibana,通过浏览器访问:http://xxx:5601/,显示可视化页面
cd ../bin
./kibana #后台启动:nohup ./kibana > kibana-start.log 2>&1 &
复制代码
4、logstash安装
解压安装包,修改配置文件
#解压安装包
tar -zxvf logstash-6.4.3.tar.gz
复制代码
进入logstash-6.4.3/bin目录创建一个conf文件,用来放抽取的配置文件,我这里演示的是从mysql库中抽取数据,如图 我这里创建了一个logstash-mysql.conf文件,里面的内容为如下图:
input {
stdin {
}
jdbc {
type => "test"
# mysql jdbc connection 连接地址
jdbc_connection_string => "jdbc:mysql://xxxx:3306/xx?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"
# 用户名
jdbc_user => "xx"
# 密码
jdbc_password => "xx"
# jdbc 驱动包路径(我们在步骤4处理的内容)
jdbc_driver_library => "/home/elk/logstash-6.4.3/bin/conf/mysql-connector-java-5.1.40.jar"
# 连接驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 开启分页查询(默认false不开启)
jdbc_paging_enabled => "true"
# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值)
jdbc_page_size => "50000"
# 例如Cron格式:“ * * * * *”(同步频率(分 时 天 月 年),默认每分钟同步一次)
#默认情况下没有时间表。如果没有给出时间表,则该语句仅运行一次。
#我这里配置的时10分钟一次
schedule => "*/10 * * * *"
# 以下是执行相关sql语句(可执行sql文件的,可将sql直接写在这)
# statement为查询数据sql,如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;
# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,access_time;
#statement_filepath => "/home/elk/logstash-6.4.3/bin/conf/test.sql"
statement => "SELECT * FROM test WHERE access_time >= :sql_last_value limit 100"
# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值;
use_column_value => true
#递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
tracking_column_type => "timestamp"
# 需要记录的字段,用于增量同步,需是数据库字段
tracking_column => "access_time"
# record_last_run上次数据存放位置;
#last_run_metadata_path => "/home/elk/last_id.txt"
#是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;
#clean_run => false
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
date {
match => ["message","UNIX_MS"]
target => "@timestamp"
}
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => ["timestamp"]
}
}
output {
elasticsearch {
#es服务器
hosts => ["localhost:9200"]
#ES索引名称
index => "test"
#自增ID
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
复制代码
logstash配置mysql数据同步到es中,需要驱动。mysql-connector-java-5.1.40.jar
然后启动logstash
logstash -f config/mysql.conf
复制代码
启动成功!打开kinaba查看数据
其他相关logstash配置可以参考官网(www.elastic.co/guide/en/lo…)
结束!!谢谢!!欢迎留言,一个正在成长路上的程序猿!!!(有不足的待完善)
———————————————— 版权声明:本文为CSDN博主「屏幕有点小」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_37953513…