ELK安装配置
1.安装JDK前把原来的java卸载
[root@localhost ~]# rpm -qa|grep java
tzdata-java-2016c-1.el6.noarch
java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
[root@localhost ~]# yum -y remove java
# 创建用户(高版本的elasticsearch不能再root环境运行,版本2的好像行,坑死了)
[root@localhost ~]# useradd elk
[root@localhost ~]# passwd elk
cd /home/elk
安装JDK(如果没有wget命令,yum安装,yum –y install wget),当然用wind下载好JDK在拉进linux安装也行
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz
tar xf jdk-8u141-linux-x64.tar.gz
mv jdk1.8.0_141/ jdk8
vim /etc/profile
加入
export JAVA_HOME=/home/elk/jdk8
export JAVA_BIN=/home/elk/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@localhost elk]# source /etc/profile
[root@localhost elk]# java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
2.修改系统环境配置满足运行Elasticsearch
vim
/etc/security/limits
.conf,配置永久
打开最大文件数,和用户进程数
* soft nofile 65536
* hard nofile 65536
* soft nproc 10240
* hard nproc 10240
ulimit
-SHn 65536 #临时打开最大文件描述符
ulimit
-SHu 65536 #临时打开最大进程数
#Linux 6.4之后,如果只修改了该文件中的nproc,那么其他非root用户对应的max_user_processes并不会改变,仍然是1024,这个是因为受到了下面这个文件的影响,改成和nproc 10240一样
vim /etc/security/limits.d/90-nproc.conf
#需要退出root用户重新登录普通用户才生效
# 限制虚拟内存
echo
"vm.max_map_count=262144"
>>
/etc/sysctl
.conf
[root@localhost ~]# sysctl -p
[root@localhost ~]# cd /home/elk/
使用wget 下载elasticsearch安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
解压
tar -zxvf elasticsearch-6.2.2.tar.gz
[root@localhost elk]# chmod -R 777 /home/elk/
[root@localhost ~]# su - elk
配置文件的elasticsearch.yml主要修改(其实单台机安装什么都默认都可以启动,如果是虚拟环境注意 jvm.options默认的内存大小就行了,默认是2G但虚拟机环境不够的)
[root@localhost elk]# cd /home/elk/elasticsearch-6.2.2
[root@localhost elasticsearch-6.2.2]# vim config/elasticsearch.ym
...
#cluster.name: cluster #单机还是不要开,如果两个节点做集群两个节点的名称一样就行,会自动加入得
#node.name: node-1 #单机还是不要开,集群两节点不能一样
network.host: 10.0.0.20 #集群两节点不能一样
http.port: 9200 #如果集群端口不能一样,第二个9201这样
bootstrap.memory_lock: false #不设置会报错bootstrap.system_call_filter: false
...
[root@localhost elasticsearch-6.2.2]# vim config/jvm.options
默认的
改成
-Xms512m
-Xmx512m
[root@localhost ~]# chmod -R 777 /home/elk/
[root@localhost ~]# su – elk
[elk@localhost ~]$ cd elasticsearch-6.2.2/bin/
[elk@localhost bin]$ ./elasticsearch
nohup ./elasticsearch & #后台启动命令
访问测试 curl 10.0.0.20:9200
4.安装elasticsearch-head插件(插件我存在百度网盘)
解压
把0.1.3_0往浏览器插件拖
在插件上访问
#默认直接解压后就可以直接启动程序,如果修改后可能会出现以下问题
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [2048] for user [elk] is too low, increase to at least [4096]
[3]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
ERROR: [1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
问题4:进程数不够
max number of threads [2047] for user [elk] likely too low, increase to at least [2048]
解决:
ulimit -a 查看所有用户的进程数
vim
/etc/security/limits
.conf,配置永久
打开最大文件数,和用户进程数
* soft nofile 65536
* hard nofile 65536
* soft nproc 10240
* hard nproc 10240
vim /etc/security/limits.d/90-nproc.conf #改成和nproc 10240一样
日常使用
curl localhost:9200 访问测试
curl localhost:9200/_cluster/health 健康状况
本机两个节点集群
改名字 端口
curl localhost:9201/_cluster/health 健康状况
9、search搜索语句入门之URL搜索
简介:讲解URL中的_search搜索语句的基本使用,美化响应结果, 索引的基础操作
集群健康检查
http://10.0.0.20:9200/_cat/health?v
http://10.0.0.20:9200/_cluster/health(推荐)
状态说明
green:正常
yellow: 集群正常 数据正常,部分副本不正常
red: 集群部分正常,数据可能丢失,需要紧急修复
查询节点列表
http://10.0.0.20:9200/_cat/nodes?v
查看所有索引
http://10.0.0.20:9200/_cat/indices?v
目前 集群中没有任何索引
补充:
curl
-X 指定http的请求方法 有HEAD GET POST PUT DELETE
-d 指定要传输的数据
-H 指定http请求头信息
新增索引
curl -XPUT 'localhost:9201/blog_test?pretty'
curl -XPUT 'localhost:9201/blog?pretty'
删除索引
curl -XDELETE 'localhost:9200/blog_test?pretty'
新增一条记录,并指定为article类型,ID为1
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/1?pretty' -d '
{
"title": "小D课堂啦啦啦",
"content":"xdclass.net 小D课堂成立于2016年的,专注互联网在线教育,课程范围包括前端,后端,大数据,人工智能,微信开发等"
}'
修改在添加数据测试
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/1?pretty' -d '
{
"title": "第二个数据",
"content":"xdclass.net 能找到吗"
}'
Logstash(搬运工)
logstash插件介绍:input,filter,output
1.下载、启动、配置
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.2.tar.gz
[root@localhost elk]# tar zxvf logstash-6.2.2.tar.gz
配置
vim /home/elk/logstash-6.2.2/config/logstash.yml
pipeline.workers: 2 #根据CPU核数增加1到2即可
vim /home/elk/logstash-6.2.2/config/jvm.options
### jvm.options
-Xms256m
-Xmx256m
cd /home/elk
2.启动(没配置input\output情况下,验证服务是否正常)
cd logstash-6.2.2
./bin/logstash -e 'input {stdin {}} output {stdout {}}'
普通验证
输入 wo shi shui 测试 测试正常
2.关闭logstash,配置input filter out 验证,
cd /home/elk/logstash-6.2.2/config/
vim test1.conf
input {
# 从文件读取日志信息 输送到控制台
file {
path => "/home/elk/elasticsearch-6.2.2/logs/elasticsearch.log"
#codec => "json" ## 以JSON格式读取日志
type => "elasticsearch"
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 标准输出,读取什么输出什么
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
}
filter使用
例子
切割插件mutate,随意输入一串以|分割的字符,比如 "123|000|ttter|sdfds*=123|dfwe
配置二 test2_filter.conf
========================================
input {
stdin {}
}
filter {
mutate {
split => ["message", "|"]
}
}
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
}
配置三 test3_es.conf
input {
file {
path => "/home/elk/elasticsearch-6.2.2/logs/elasticsearch.log"
type => "elasticsearch"
start_position => "beginning" #从文件开始处读写
}
}
output{
if [type] == "elasticsearch" {
elasticsearch{
hosts=>["10.0.0.20:9200"]
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
}
========================================
input {
file {
path => "/home/elk/elasticsearch-6.2.2/logs/elasticsearch.log"
type => "elasticsearch"
start_position => "beginning" #从文件开始处读写
}
}
output{
elasticsearch{
hosts=>["10.0.0.20:9200"] #输出到ES中
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug} #输出到控制台
}
========================================
验证
查看索引列表 http://localhost:9201/_cat/indices?v
查看数据 http://localhost:9201/es-message-2018.02.26/_search
3.启动验证
[root@localhost config]# cd ../bin/
[root@localhost bin]# ./logstash -f ../config/test1.conf
#把elasticsearch关了再启动,测试logstash输出的日子是否和elasticsearch一样,因为上面test1.conf采集的是elasticsearch日志
logstash启动成功
启动elasticsearch(注意:root是启动不成功的)
root@localhost bin]# su – elk
[elk@localhost ~]$ cd elasticsearch-6.2.2/bin/
[elk@localhost bin]$ ./elasticsearch
验证结果正常
elasticsearch的启动日志根据test1定义的格式输出
kibana
1.下载,安装
[root@localhost ~]# cd /home/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.2-linux-x86_64.tar.gz
tar -zxvf kibana-6.2.2-linux-x86_64.tar.gz
2.配置外网访问
[root@localhost elk]# vim kibana-6.2.2-linux-x86_64/config/kibana.ym
默认连接的是本机elasticsearch,可在配置文件中修改
elasticsearch.url: “http://10.0.10.20:9200”
server.host: "0.0.0.0"
启动(前提示es 和 logs已经启动)
[root@localhost elk]# cd kibana-6.2.2-linux-x86_64/bin/
[root@localhost bin]# ./kibana
注意:因为启动时报错访问不到 http://localhost:9200/ 所以把localhost解析下
vim /etc/hosts
10.0.0.20 localhost
测试启动正常
kibana状态及服务器资源使用率
基础操作文档:https://www.elastic.co/guide/en/kibana/current/getting-started.html
上面我是运行命令行,并且只输出到屏幕上,大部分情况下,我们都是会定义一个logstash.conf配置文件来启动Logstash,这里我们写一个完整的logstash.conf,把把对象输出到屏幕和Elasticsearch
input {
stdin {}
}
output {
stdout {
codec => rubydebug {}
}
elasticsearch {
hosts => [
"192.168.88.3:9200"
]
}
}