ELK 是Elasticsearch Logstash kibana 三个开源软件的组合来进行搭建.
(一) 安装Elasticsearch程序
Elasticsearch7.8 安装部署
(0)初始化操作--------------------------
操作系统使用7.8版本的 Java版本是7.8.0
下载elasticsearch 登陆到官网上面 登陆到 https://www.elastic.co/cn/
Selinux和firewalld防火墙都要关闭掉
Systemctl status/stop/disabled firewalld
(1)安装命令----------------------------
Cd /usr/local
Tar –zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz
Ln –s elasticsearch-7.8.0 elk 执行相关的软连接
设置环境变量,开始创建java环境的目录,
cd /usr/local/elk
Vi /etc/profile
export JAVA_HOME= /usr/local/elk/jdk
source /etc/profile
Vi .bash_profile
export PATH=$JAVA_HOME/bin:$PATH
echo $JAVA_HOME 可以看现相关的版本信息等
查看java版本: java –version
Which java 看到的路径信息是 /usr/local/elk/jdk/bin/java
开始修改修改相关的配置文件信息
Cd /usr/local/elk ls查看相关的信息
修改配置 vi config/elasticserarch.yml的配置
记得都是:后面都是空格才可以
#cluster.name: my-application cluster.name: fxcluster
#node.name: node-1 node.name: node-1
#path.data: /path/to/data /es/data
#path.logs: /path/to/logs path.logs: /es/logs
#network.host: 192.168.0.1 network.host: 0.0.0.0
#http.port: 9200 http.port: 9200
#cluster.initial_master_nodes: ["node-1", "node-2"] cluster.initial_master_nodes: ["node-1"]
修改配置 config/jvm.options 修改内存的大小 free –q
-Xms1g
-Xmx1g
运行elasticsearch
hwclock –w date -s "20220111 14:11"
bin/elasticsearch 在前台开始运行相关的程序进行开启操作
can not run elasticsearch as root 该软件不能在root用户下面进行操作的
创建一个用户名字为elk,然后更改相关的权限和信息等。
useradd elk
passwd elk elk
id elk
[root@localhost local]# chown -R elk:elk elk
[root@localhost local]# chown -R elk:elk elasticsearch-7.8.0
[root@localhost /]# chown -R elk:elk es 修改相关的日志的权限
Su – elk
[elk@localhost elk]$ bin/elasticsearch 报三个error
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [elk] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /es/logs/fxcluster.log
第一个和第二个报错需要修改相关的内存参数
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
es hard nproc 4096
es soft nproc 4096
需要重启一下服务器才可以生效,init 6
第三个报错
Vi /etc/sysctl.conf
vm.max_map_count=262144
sysctl –system
然后重新连接一下,执行命令看下是否已经改变
ulimit –Hn 和 ulimit -Sn
ulimit –a 可以看到修改后的参数配置信息等
然后 jps查看
[root@localhost ~]# jps
7124 Elasticsearch
7335 Jps
Which jps
Ps –ef|grep java
也可以看到elasticsearch相关的服务已经是启动的状态了 ,然后访问浏览器查看相关elasticsearch该服务是否已经是正常的启动状态了
{
"name" : "node-1",
"cluster_name" : "fxcluster",
"cluster_uuid" : "Da7K8o5xRaOhPWrKxjn_gg",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
可以执行curl 命名来执行
Curl -X GET [http://localhost:9200](http://localhost:9200) 输出的文本内容基本上都一样 说明es已经是安装好了
(2)elk基础说明
Elasticsearch的基础说明
[root@localhost ~]# java –version
[elk@localhost elk]$ bin/elasticsearch -d -p fx.pid 后台来进行相关的操作等
进程号可以看到相关的pid的信息,fx.pid这个可以看到相关的信息等 cat fx.pid
[root@localhost ~]# jps -l
7926 jdk.jcmd/sun.tools.jps.Jps
7832 org.elasticsearch.bootstrap.Elasticsearch
看到相关的服务已经是启动的状态了
Elasticsearch 是分布式lucene分布式搜索的引擎
以mysql为例子 ,数据库-表-插入数据-sql查询
Es的话是,
index(索引)-----数据库(database)
类型(type)-----表(table) 字段(field)---字段,列(column)
1- 索引可以理解为 关系数据库的db
2- 一个type就类似于一个表,ES5.x中一个index可以有多个type/Es6.x中一个index只能有一个type/Es7.0以后已经移除type,使用_doc文档
3-(document)---记录(row),一个document 相当于关系数据库中的一行记录
4-字段(field),相当于关系数据库中的字段
5-映射(mapping)mapping定义了每个字段的类型等信息,相当于关系型数据库中表字段的类型
6-分片(shards) 因为es是分布式的搜索引擎,所以index通常会分解成不同的部分,而这些分布在不同节点的数据库就是分片
Es自动管理和组织分片,并在必要的时候对分片数据进行在平衡分配,所以用户基本上不同担心分片的处理细节
7-副本(replicas)
主要目的是为了故障转移,副本是分片的副本,分片有主分片和副本分片等
一个index在物理上分布在多个主分片中,每个主分片只存放部分数据
每个主分片,可以有多个副本,叫副本分片,是主分片的复制
8-节点(node),一台机器或者一个进程
9-集群,集群是一个或多个节点组成
(二) 安装Elasticsearch和head程序
(一)安装head程序
1-需要安装nodejs 和 head这两个
Mkdir –p /opt/nodejs
wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linux-x64.tar.xz
分两步解压
xz -d node-v16.13.0-linux-x64.tar.xz
tar -xvf node-v16.13.0-linux-x64.tar
在 vi /etc/profile 文件中加入以下内容:
export NODEJS_HOME=/opt/nodejs/node-v16.13.0-linux-x64/bin
export PATH=$NODEJS_HOME:$PATH
source /etc/profile
测试安装:
[root@localhost nodejs]# node -v
v16.13.0
[root@localhost nodejs]# npm -version
8.1.0
2-需要安装grunt
Elasticsearch-head 插件需要使用grunt
root@localhost nodejs]# npm install -g grunt-cli
3-下载elasticsearch-head
通过地址:wget https://github.com/mobz/elasticsearch-head/archive/master.zip
Yum –y install zip yum -y install unzip
# unzip master.zip
[root@localhost nodejs]# mkdir -p /opt/elasticsearch/elasticsearch-6.5.3/
[root@localhost nodejs]# mv elasticsearch-head-master /opt/elasticsearch/elasticsearch-6.5.3/
4-安装pathomjs
Cd /opt/elasticsearch/elasticsearch-6.5.3/elasticsearch-head-master/
yum install bzip2 -y
npm install
npm install -g core-js@3.4
修改elasticsearch.yml的配置
vi /usr/local/elk/config/elasticsearch.yml
新增
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
5-运行启动elasticsearch-head该程序
cd /opt/elasticsearch/elasticsearch-6.5.3/elasticsearch-head-master
执行命令:[root@localhost elasticsearch-head-master]# grunt server
默认端口是9100 可以通过浏览器来进行登录操作的
通过web浏览器登录网址 [https://localhost:9100](https://localhost:9100)
然后在运行elasticsearch 这个服务
Cd /usr/local/elasticsearch-7.8.0
[elk@localhost elasticsearch-7.8.0]$ bin/elasticsearch
然后在刷新[https://localhost:9100](https://localhost:9100) 可以看到相关的head服务已经是启动的状态了 连接网址eserarch的网址:[http://192.168.1.66:9200/](http://192.168.1.66:9200/) 就可以显示了
图像展示
(三) 安装postman程序
1-创建索引
操作使用postman来进行相关的请求步骤就可以进行操作了,安装postman,然后进行相关的操作
请求 put [http://192.168.1.66:9200/fxindex01](http://192.168.1.66:9200/fxindex01)可以发送请求可以看到创建了一个相应的索引信息
可以看到body上面的信息等,看到相关的路线
{
"acknowledged": **true**,
"shards_acknowledged": **true**,
"index": "fxindex01"
} 可以看到elasticsearch-head上面也有了
2-查看索引
通过postman 来进行get ,GET [http://192.168.1.66:9200/fxindex01](http://192.168.1.66:9200/fxindex01)
{
"fxindex01": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1641966928613",
"number_of_shards": "1", 会存储两份数据
"number_of_replicas": "1",
"uuid": "ybyih-nITtSAYchqS1v7Fg",
"version": {
"created": "7080099"
},
"provided_name": "fxindex01"
}
}
}
}
3-新增文档doc的命令
请求 PUT http://192.168.1.66:9200/fxindex01/_doc/1
把相应的请求数据放里面
{
"name":"zhangsan",
"age":20,
"email":"zhangsan@qq.com"
}
可以在elastichead的数据索引上面看到,已经有该字段了
Get [http://192.168.1.66:9200/fxindex01/_doc/1](http://192.168.1.66:9200/fxindex01/_doc/1) 可以看到
然后在插入一条数据,记住_doc/2 后面的数据要唯一
PUT http://192.168.1.66:9200/fxindex01/_doc/2
{
"name":"zhangsan2",
"age":23,
"email":"zhangsan2@qq.com"
}
可以通过 Get [http://192.168.1.66:9200/fxindex01/_search](http://192.168.1.66:9200/fxindex01/_search)来查看所有的文档
可以通过 Get [http://192.168.1.66:9200/fxindex01/_doc/1/_source](http://192.168.1.66:9200/fxindex01/_doc/1/_source) 来查看对应的文档
可以通过 Get [http://192.168.1.66:9200/fxindex01/_doc/1?_source](http://192.168.1.66:9200/fxindex01/_doc/1?_source)=name 来查看对应只有name的字段了
可以通过 Get http://192.168.1.66:9200/fxindex01/_mapping
RESTFULful风格介绍
POST /user 新增资源
DELETE /user/100 删除资源
PUT /user/100 更新或新增资源
GET /user/100 获取资源
或者通过 curl 工具 来进行发送请求
CURL –X GET [http://localhost:9200](http://localhost:9200) 可以获得相关的请求
图像展示
(四) Logstash 安装及配置
LOGstash 是一个开源的数据收集器,他具有备实时数据传输能力,他可以统一过滤来自不同源的数据,并且支持各种报表由于日志文件来源多,如:系统日志,服务器日志,tomcat日志,nginx日志因此,我们可以使用logstash 对日志文件进行收集和统一过滤,变成可读性高的内容
E:数据的存储和搜索
L:log数据的过滤和收集
K:web方式的前端展示
(一)安装---------------------------------------
[root@localhost local]# pwd
/usr/local
[root@localhost local]# tar -zxvf logstash-7.8.0.tar.gz
[root@localhost local]# ln -s logstash-7.8.0 logstash
[root@localhost config]# cp logstash-sample.conf logstash.conf
[root@localhost logstash]# bin/logstash -f config/logstash.conf 通过配置文件来进行输出,通过前台来启动
通过后台的方式来进行启动该logstash 的方式
Vi start.sh
#!/bin/bash
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf >> /usr/local/logstash/output.log 2>&1 &
cat /usr/local/logstash/output.log 看到相关的日志输出
(二)配置---------------------------------------------
[root@localhost config]# cat logstash.conf
input {
#从文件读取日志信息
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
filter {
}
output{
#标准输出
elasticsearch {
hosts => ["192.168.1.66:9200"]
index => "msg-%(+YYYY.MM.dd)"
}
}
(三)插件分类-----------------------------------------------
logstash 插件分类:
input 输入,codecs 解码 ,filters 过滤,outputs 输出
查看插件命令为:
Bin/logstash-plugin list 查看插件的类型
(五) Kibana 安装部署
Kibana 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch 一起使用的,可以用kibana搜素,查看,交互存放在Elasticsearch索引里的数据
使用各种不同的图表,表格,地图等kibana能够很轻松展示高级数据分析与可视化
最好是一致的,是7.8.0这个才可以
[root@localhost local]# tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz
[root@localhost local]# ln -s kibana-7.8.0-linux-x86_64 kibana
开始进行相关的配置
chown -R elk:elk kibana 给相关的目录进行赋权
[elk@localhost config]$ vi /usr/local/kibana/config/kibana.yml
server.port: 5601
server.host: "192.168.1.66"
elasticsearch.hosts: ["http://localhost:9200"] #如果不在一台机器上面就要写好对应的ip地址
1- 启动方式
前台启动:bin/kibana
后台启动:vi startup.sh
#!/bin/bash
Nohup /usr/local/kibana/bin/kibana >> /usr/local/kibana/output.log 2 >&1 &
可以访问web网址: [http://192.168.1.66:5601](http://192.168.1.66:5601) 查看相关的地址
可以点击saved objects 可以看到相关的Elasticsearch
主页home也可以添加相关的索引信息,路径也在elasticSearch---IndexManagement 可以看到相关的数据已经添加到上面了
主页的 security 的management 的 dev Tools 里面可以使用
GET /_cat/indices 可以看到相关的索引信息等 不用加地址信息
(六) filebeat 收集nginx日志 ,并在kibana 展示
logstash 和filebeat都具有日志收集功能,filebeat更轻量,占
用资源更少,但logstash 具有filter功能,能过滤分析日志。一
般结构都是filebeat采集日志,然后发送到消息队列,redis,
kafaka。然后logstash去获取,利用filter功能过滤分析,然后
存储到elasticsearch中。
(一)nginx安装------------------
[root@localhost local]# mv zlib-1.2.11.tar.gz /usr/local/
[root@localhost local]# mv pcre-8.38.tar.gz /usr/local/
yum -y install gcc*
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.38 --with-zlib=/usr/local/zlib-1.2.11
Make
make install
sbin/nginx –c conf/nginx.conf
[root@localhost nginx]# sbin/nginx -c conf/nginx.conf 默认是80 端口,直接输入回车就行了
访问:192.168.1.66:80 可以看到相关的nginx显示的是80
[root@localhost logs]# cat /usr/local/nginx/logs/access.log 可以看到相关的路径信息
Worker process 也可以改成4个
[root@localhost nginx]# ps -ef|grep nginx
root 34769 1 0 07:53 ? 00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
nobody 34770 34769 0 07:53 ? 00:00:00 nginx: worker process
nobody 34771 34769 0 07:53 ? 00:00:00 nginx: worker process
nobody 34772 34769 0 07:53 ? 00:00:00 nginx: worker process
nobody 34773 34769 0 07:53 ? 00:00:00 nginx: worker process
root 34775 34479 0 07:53 pts/2 00:00:00 grep --color=auto nginx
修改相关的配置文件,然后通过命令来进行验证是否配置文件正确
[root@localhost nginx]# sbin/nginx -t -c conf/nginx.conf 验证配置文件是否正确
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重启nginx可以使用,sbin/nginx –s reload
[root@localhost nginx]# sbin/nginx -s reload 可以进行重启操作
(二) filebeat安装-----------------
[root@localhost tools]# tar -zxvf filebeat-7.8.0-linux-x86_64 解压文件
mv filebeat-7.8.0-linux-x86_64 /usr/local/
[root@localhost config]# cd /usr/local/
ln -s filebeat-7.8.0-linux-x86_64 filebeat
配置文件的路径是filebeat.yml 这个是文件的配置文件的具体的路径信息
#filebeat配置,filebeat.yml
filebeat.inputs:
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /usr/local/nginx/logs/access-json.log
output.logstash:
enable: true
hosts: ["192.168.1.66:5044"]
前台启动: ./filebeat –e –c filebeat.yml 启动相关的文件等
后台启动:vi startup.sh
chmod a+x startup.sh
#! /bin/bash
nohup /usr/local/filebeat/filebeat –e –c filebeat.yml >> /usr/lcoal/filebeat/output.log 2 >&1 &
chmod a+x startup.sh
删除相关的data.json数据等
[root@localhost filebeat]# pwd
/usr/local/filebeat/data/registry/filebeat
[root@localhost filebeat]# rm data.json
[root@localhost logs]# pwd
/usr/local/nginx/logs
[root@localhost logs]# cat access.log |wc –l 可以看到数据跟kibana上面滴数据已经有该数据了
(三)logstash配置-----------
input {
beats {
host => "192.168.1.66"
port => 5044
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
date {match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
(四)启动程序------------------------
[root@localhost local]# su - elk
[elk@localhost ~]$ cd /usr/local/elk/
[elk@localhost elk]$ ./start.sh
[elk@localhost elk]$ cd /usr/local/kibana
[elk@localhost kibana]$ ./start.sh
[elk@localhost kibana]$ cd /usr/local/filebeat/
[elk@localhost filebeat]$ ./start.sh
[root@localhost local]# cd /usr/local/logstash
[root@localhost logstash]# ./start.sh
[root@localhost nginx]# sbin/nginx -c conf/nginx.conf
(五)访问kibana,刷新nginx
访问网址:http://192.168.1.66:5601/app/kibana#/home
创建模板,建立index pattern,创建一个时间戳,@timestamp 相关类型的,然后去discover里面去查看相关的数据信息等
或者在logs里面的settings 里面进行查看 ,在indices里面,相关的log indices 里面输入filebeat-*, 然后stream里面进行日志的查看等
图像显示
(七)Filebeat+Kafka/redis+Logstash收集日志数据
filebeat:filebeat更轻量,占用资源更少,适合客户端使用。当logstash宕机的时候,这时候filebeat就不能往logstash里写数据了,这期间的日志信息可能就无法采集到,因此一般都会采用redis或kafka作为一个消息缓冲层。logstash去消费数据写至es。
(一)安装redis
安装redis
[root@localhost tools]# tar -zxvf redis-5.0.9.tar.gz
Make
Make install
初始化redis的安装和配置
[root@localhost utils]# pwd
/root/tools/redis-5.0.9/utils
[root@localhost utils]# ./install_server.sh
[root@localhost utils]# ps -ef|grep redis 可以看到redis已经是启动的状态了
[root@localhost utils]# chkconfig –list 可以看到3,4,5都已经启动了
修改redis的配置信息
[root@localhost ~]# vi /etc/redis/6379.conf
修改bind 0.0.0.0 让所有的人都可以连接上去
修改 daemonize yes 改为yes是允许后台可以启动
然后重启redis的服务进行相关的配置等
Systemctl restart redis_6379 重启redis服务可以看到相关的服务已经启动了,可以看到redis已经重启了,服务已经启动了
service redis_6379 start 通过这个命令来启动
service redis_6379 stop 这个命令来进行关闭
在windows上面安装destopmanager 的管理工具测试连接redis的情况
然后可以看到其实是有16个 redis的数据库 的情况
通过安装RedisDesktopManager 来连接redis数据库
配置--------------------------------
(一)filebeat配置:
filebeat.inputs:
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /usr/local/nginx/logs/access-json.log
fields:
filetype: nginxjson
fields_under_root: true
output.redis:
enabled: true
hosts: ["127.0.0.1:6379"]
key: nginx
db: 0
datatype: list
(二)logstash配置
input {
redis {
host => "127.0.0.1"
port => 6379
key => "nginx"
data_type => "list"
db => 0
}
}
filter {
json {
source => "message"
remove_field => ["beat","offset","tags","prospector"]
}
date {
match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
如果这个时候logstash挂掉,则数据会停留在redis中,没有消费掉
重启logstash,可以看到redis中数据清空,kibana中有日志显示
Kafka安装配置
Filebeat---kafka---logstash—elasticsearch---kibana 的展示收集等
[root@localhost local]# mv kafka_2.13-2.6.0 /usr/local/
[root@localhost local]# cd /usr/local/
[root@localhost local]# ln -s kafka_2.13-2.6.0/ kafka 然后有一个软链接
然后需要启动zookeeper程序,kafka使用zookeeper程序,所以需要启动一个zookeeper
Bin/zookeeper-server-start.sh config/zookeeper.properties
然后设置成后台启动
#!/bin/bash
nohup /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties > /usr/local/kafka/zk-output.log 2>&1 &
启动zookeep
[root@localhost kafka]# chmod +x start.sh
[root@localhost kafka]# ./start.sh
修改kafka的配置
[root@localhost kafka]# chmod +x start.sh
vim config/server.properties
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.1.66:9092
然后通过前台或者后台的方式来启动
前台启动 [root@localhost kafka]# bin/kafka-server-start.sh config/server.properties
后台启动 [root@localhost kafka]# bin/kafka-server-start.sh –daemon config/server.properties
然后可以通过kafka-tool工具来进行连接的可以连接到zookeeper的管理端地址
输入相关的地址信息等,来进行连接起来,zookeep的端口是2181然后进行相关的连接
创建Topic
bin/kafka-topics.sh --create –zookeeper localhost:2181 --replication-factor 1 --partions 1 --topic fx-topic
bin/kafka-topics.sh --create –zookeeper 192.168.1.66:2181 --replication-factor 1 --partitions 1 --topic fx-topic
查看topic列表
bin/kafka-topics.sh --list –zookeeper localhost:2181
启动生产者 9092是kafka的端口
Bin/kafka-console-producer.sh –broker-list localhost:9092 –topic fx-topic
启动消费者
Bin/kafka-console-consumer.sh –boostrap-server localhost:9092 –topic fx-topic –from-beginning
Filebeat的配置