(踩坑)小白安装 ELK 步骤方法

搭建ELK日志分析系统

1.

# 先安装 jdk1.8以上版本

yum install java-1.8.0-openjdk* -y

# 查看java版本

java -version

# 查找java的环境变量

which java

ls -lrt /usr/bin/java

ls -lrt /etc/alternatives/java

# 至此断定jdk安装路径为

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

vim   /etc/profile

# 在最后面加上:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

# 保存退出

source /etc/profile

# 验证

echo $JAVA_HOME

2. 安装 logstash

# 下载 logstash 7.10.2 软件包

https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm

rpm -ivh logstash-7.10.2-x86_64.rpm

vim /etc/logstash/conf.d/logstash.conf

input {

file {

path =>"/usr/log/error.log"

start_position => "beginning"

type =>"system"

}

}

output {

elasticsearch {

hosts =>["192.168.51.245:9200"]

index => "errorlog-msg"

}

}

多个站点,则按ip+类型区分

# 启动Logstash服务

设置服务自启动:systemctl enable logstash

启动服务:systemctl start logstash

停止服务:systemctl stop logstash

重启服务:systemctl restart logstash

查看服务状态:systemctl status logstash

3.安装 kibana

# 下载 kibana 7.10.2 软件包

https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm

rpm -ivh kibana-7.10.2-x86_64.rpm

vim /etc/kibana/kibana.yml 

# 增加汉化

i18n.locale: "zh-CN"

注意要把5601端口放开

# 启动命令

cd /etc/init.d

./kibana start

# 查看状态

./kibana status

4.安装 Elasticsearch

# 下载Elasticsearch 7.10.2软件包

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm

参考文章:

Linux下安装 ELK6日志分析系统教程_jdk-8u112-linux-x64.rpm-CSDN博客

# 安装Elasticsearch

mkdir /usr/local/elk

# 解压。注意要cd进入你的elasticsearch-7.10.2.tar.gz下载目录才能解压 tar -xzf elasticsearch-7.10.2-linux-x86_64.tar.gz

# 进入刚才解压的目录

cd elasticsearch-7.10.2

[root@localhost elasticsearch-6.3.2]# ./bin/elasticsearch //运行 ,启动的时候系统可能会卡住,耐心等待就好了

注意,上面运行后会出现这样的错误:can not run elasticsearch as root ,错误很明显,不能以root用户运行elasticsearch 。

# 所以我们这里要新建一个用户组,及用户。如下:

groupadd elsearchgroup //添加名为elsearchgroup的组

useradd -g elsearchgroup elsearchuser //在elsearchgroup组中添加一个elsearchuser用户

passwd elsearchuser //更改elsearchuser的密码

su elsearchuser //从root用户切换到elsearchuser用户

[elsearchuser@localhost elasticsearch-6.3.2]$ ./bin/elasticsearch //在elsearchuser下运行elasticsearch

这时候可能还会报像这样的错误:AccessDeniedException …. 。原因是你的文件访问权限问题(因为你刚才是在root用户下解压的这些

目录,读写权限root用户拥有,而你更换了用户角色,所以就没权限了)。更改一下访问权限就可以了。

# 这里要注意切换为 root 用户

chown -R elsearchuser:elsearchgroup elasticsearch-6.3.2//更改elasticsearch-6.3.2目录及其子目录的所属组为elsearchgroup,所述用户为elsearchuser

# 切换为 elsearchuser 用户

su elsearchuser

chmod -R 777 elasticsearch-6.3.2 //-R参数 和 777 结合表示把elasticsearch-6.3.2目录及其子目录的权限设置为完全可读写。

注意:解压后的 elasticsearch-6.3.2 目录中 要用 命令 ll 挨个文件查一下权限

Likely root cause: java.nio.file.AccessDeniedException: /usr/local/elk/elasticsearch-6.8.4/config/elasticsearch.keystore

像上面这种报错,就是 这个文件的权限所属还是 root

# 参考文章

Linux下安装 ELK6日志分析系统教程_jdk-8u112-linux-x64.rpm-CSDN博客

# 修改配置文件

我们使用的.tar.gz格式的压缩包安装的elasticsearch-6.6.2。解压出来默认的目录结构都是默认组织在elasticsearch-6.6.2目录下的。

如下图:

 ​

可以看到data和logs目录都在默认的elasticsearch-6.6.2目录下。如果我们就使用这样的默认目录结构保存我们的数据(data)和日志

(logs),当我们更新我们的elasticsearch-6.6.2到更新的版本后,data和logs就很大的风险被新的版本覆盖。所以我们应该更改

elasticsearch.yml配置文件的下的path.data 和 path.logs的路径,避免使用默认的路径。例:

path.data: /usr/worksapces/elsearch6.6.2/data //去掉#,更改路径

path.logs: /usr/worksapces/elsearch6.6.2/logs

注意:增加了文件目录后要及时的加权限。

3.3.1.cluster.name :

集群(cluster)是一个或多个节点(node)(server:服务器)的集合,它们一起保存整个数据,并在所有节点上提供联合索引和搜索功

能。集群默认名为:elasticsearch。cluster.name 就是来更改默认的名称为我们想要的名称的。群集的名称不能重复。如果一个节点是

通过设置集群名来加入该集群,那么该节点只能是该群集的一部分。例:

cluster.name: logging-prod

3.3.2.node.name:

节点(node)就是一个单一的服务器(比如我们拿自己的电脑启动了elasticsearch,我们的电脑就相当于一个节点),它是集群的一部

分。它能存储数据,并参与群集的索引和搜索功能。节点的默认名是随机的UUID(random Universally Unique IDentifier)。一个节点

只能加入一个集群。通过node.name来更改默认的名称。 例:

node.name: prod-data-2

3.3.4.network.host

默认的就是127.0.0.1(localhost),即本地。但是为了与其他服务器上的节点进行通信并形成集群,所以我们应该更改network.host,

例如:network.host: 192.168.52.4 //自己在网络上的ip,

修改elasticsearch.yml配置文件中ip地址

更改network.host可能会遇到下面的错误:

错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]。

解决错误1:

打开/etc/security/limits.conf文件,添加以下两行代码并保存:

* hard nofile 131072

错误2:memory locking requested for elasticsearch process but memory is not locked

解决错误2:修改/usr/local/elk/elasticsearch-7.10.2/config/ 下的 elasticsearch.yml文件

bootstrap.memory_lock : false

错误3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决错误3:终端输入以下命令:

sysctl -w vm.max_map_count=262144 //需要root权限

sysctl -a|grep vm.max_map_count //查看修改结果,可选

或者

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]编辑 /etc/security/limits.conf,追加以下内容;

* soft nofile 65536

* hard nofile 65536

此文件修改后需要重新登录用户,才会生效

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

编辑 /etc/sysctl.conf,追加以下内容:

vm.max_map_count=655360

保存后,执行:

sysctl -p

重新启动,成功。

3.3.5.discovery.zen.ping.unicast.hosts

如果没有任何网络配置,Elasticsearch将扫描端口9300到9305来连接到同一台服务器上运行的其他节点,这其实就是在我们没有进行任何

网络配置的情况下,给了我们一个自动的群集(auto-clustering)体验。

当你要将网络上多个在其它服务器上的节点建立起一个集群的时候,你必须将这些节点一一罗列出来:例:

discovery.zen.ping.unicast.hosts:

- 192.168.1.43:9300

- 192.168.1.44 //默认使用9300端口

可以通过这些节点来自动发现新加入集群的节点。

3.3.6.discovery.zen.minimum_master_nodes

设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。例:

discovery.zen.minimum_master_nodes: 3

bin/elasticsearch &

# 执行启动命令

./bin/elasticsearch

虚拟机内浏览器访问 localhost:9200

得到下图则表明elasticsearch-6.3.2安装成功

 ​

elasticsearch 错误总结:

# 服务正常启动,但不能正常访问 需切换到root用户 修改

[root@linux-node1 ~]# vim /etc/systemd/system.conf    #####修改如下行,即可解决error报错

DefaultLimitNOFILE=65536

DefaultLimitNPROC=32000

DefaultLimitMEMLOCK=infinity

[root@linux-node1 elasticsearch]# vim /etc/security/limits.conf    #####添加如下行,即可解决warn警告

* soft nofile 65536

* hard nofile 65536

* soft nproc 4096 * hard nproc 4096

elasticsearch soft memlock unlimited

elasticsearch hard memlock unlimited

* hard nofile 131072

编辑 /etc/sysctl.conf,追加以下内容:

vm.max_map_count=655360

保存后,执行:

sysctl -p

重新启动,成功。

注意给这个文件改为 test 权限

/usr/local/elk/elasticsearch-7.6.1/config

虚拟机客户端一定要重启

报错参考文档链接:

https://www.cnblogs.com/hellxz/p/11057234.html

注意:ELK三种安装包,必须是版本一致。否则运行不起来

logstash 配置文件语法

# 参考链接

https://www.cnblogs.com/centos2017/p/8920519.html

一台机器上传输两种日志

ELK 增加钉钉报警

安装 sentinl 插件

进入目录

cd usr/share/kibana/bin

执行

./kibana-plugin install file:///usr/local/src/sentinl-v7.6.1.zip

会报错。

Plugin installation was unsuccessful due to error "ENOENT: no such file or directory, mkdir"

修改 kibana 目录下 plugins 的权限 为上面Elasticsearch的权限

修改命令再次执行

./kibana-plugin install sentinl url /usr/local/src/sentinl-v7.6.1.zip

这里好像是请求 7.10.2 版本的 sentinl ,因为系统里的 ELK 版本都是7.10.2,但实际情况是并没有这个版本的sentinl

在最新的测试中, 把这个文件目录的权限改为 test 后,就能安装成功

尝试 低版本的 ELK sentinl 安装

下载了三个版本的 ELK 以及 sentinl插件 均为 6.8.4版本

6.8.4 安装过程

# 执行命令

./kibana-plugin install file:///usr/local/elk/sentinl-v6.8.4.zip

这样就算安装成功了

7.6.1 安装命令

root:

bin/kibana-plugin --allow-root install file:///usr/local/elk/sentinl-v7.6.1.zip

test:

先把 kibana 文件权限变更为 root

再把 plugins 权限变更为 test

写入 777

如果之前安装了 sentinl 先删除卸载掉,再安装,。

bin/kibana-plugin remove sentinl

安装

bin/kibana-plugin install file:///usr/local/elk/sentinl-v7.6.1.zip

sentinl 安装成功后 一定要重启

{

"actions": {

"test-dingding": {

"name": "warn",

"throttle_period": "1m",

"webhook": {

"priority": "high",

"stateless": false,

"method": "POST",

"host": "oapi.dingtalk.com",

"port": "443",

"path": "/robot/send?access_token=3614d5e3a2c972da20b1f96135266470a64174bde54c65df858bcc9005a87b5f",

"body": "{\"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\":\" 异常发生,请处理~ \r\n name:{{payload.hits.hits.0._index}} \r\n type:{{payload.hits.hits.0._source.type}} \r\n timestamp:{{payload.hits.hits.0._source.@timestamp}} \r\n path:{{payload.hits.hits.0._source.path}} \r\n content:{{payload.hits.hits.0._source.message}}\"\r\n}}",

"params": {

"watcher": "{{watcher.title}}",

"payload_count": "{{payload.hits.total}}"

},

"headers": {

"Content-Type": "application/json"

},

"message": "error测试报警",

"use_https": true

}

}

},

"input": {

"search": {

"request": {

"index": [

"*"

],

"body": {

"query": {

"bool": {

"must": [

{

"query_string": {

"analyze_wildcard": true,

"query": "120soso.com"

}

},

{

"range": {

"@timestamp": {

"gte": "now-10h",

"lte": "now",

"format": "epoch_millis"

}

}

}

],

"must_not": []

}

}

}

}

}

},

"condition": {

"script": {

"script": "payload.hits.total > 1"

}

},

"trigger": {

"schedule": {

"later": "every 1 minutes"

}

},

"disable": true,

"report": false,

"title": "errorlog-推送钉钉",

"save_payload": false,

"spy": true,

"impersonate": false

}

注意上面标红的地方,

"name": "warn", 对应下面的 actions

"schedule": {

"later": "every 1 minutes"

} 对应下图的 INTERVAL

"title": "errorlog-推送钉钉", 对应 title

"path":

要填写钉钉机器人的 token 路径

"body":

这里对应的是,检索到的数据中的json, \r\n是换行和空行

payload.hits.hits.0._index 对应的是 name

payload.hits.hits.0._source.type 对应的是 type

payload.hits.hits.0._source.@timestamp 对应的是 @timestamp

......

但是,上图中的配置文件,好像没有对 / 等做转义处理。导致报警提示中显示的为 unicode

不易于查看

"index": [

"*"

],

这个意思是 匹配所有文件

"title": "errorlog-推送钉钉",

"query": "120soso.com"

意思是 关键词。 匹配到 120soso.com 关键词的句子。就报警

"gte": "now-10h",

检索最近10个小时的日志

"later": "every 1 minutes"

一分钟执行一次

--------------------------------------------------

2021.03.06 正确配置文件

{

"actions": {

"test-dingding": {

"name": "warn",

"throttle_period": "1m",

"webhook": {

"priority": "high",

"stateless": false,

"method": "POST",

"host": "oapi.dingtalk.com",

"port": "443",

"path": "/robot/send?access_token=252aa7bbd7b217f1bc887a591e41c6ab435cb7fe7d16f347d7d244ccd6c517d8",

"body": "{\"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\":\" 异常发生,请处理~ \r\n name:{{payload.hits.hits.0._index}} \r\n type:{{payload.hits.hits.0._source.logsourceip}} \r\n timestamp:{{payload.hits.hits.0._source.@timestamp}} \r\n path:{{payload.hits.hits.0._source.source}} \r\n content:{{payload.hits.hits.0._source.err_message}}\"\r\n}}",

"params": {

"watcher": "{{watcher.title}}",

"payload_count": "{{payload.hits.total}}"

},

"headers": {

"Content-Type": "application/json"

},

"message": "ELK测试报警",

"use_https": true

}

}

},

"input": {

"search": {

"request": {

"index": [

"nginx_error*"

],

"body": {

"query": {

"bool": {

"must": [

{

"query_string": {

"analyze_wildcard": true,

"query": "No such file or directory"

}

},

{

"range": {

"@timestamp": {

"gte": "now-1h",

"lte": "now",

"format": "epoch_millis"

}

}

}

],

"must_not": []

}

}

}

}

}

},

"condition": {

"script": {

"script": "payload.hits.total > 1"

}

},

"trigger": {

"schedule": {

"later": "every 1 minutes"

}

},

"disable": true,

"report": false,

"title": "errorlog-推送钉钉",

"save_payload": false,

"spy": true,

"impersonate": false

}

---------------------------------------------------

在上面的配置文件 写好之后。

想要的指定的日志报警。 只需后续在配置文件中更改,或者追加配置即可。

1. 修改 body 中的内容,根据 es 展示的内容 写入检索

2. input 中的 query 想要检索指定关键词。写入即可

3. 在 condition 中可以设置阈值,当达到多少次,再报警。

4. 在 trigger 中的 later 可以设置报警的间隔时长

在钉钉中添加机器人

1. 有一个 webhook 的 url 路径需要用到

2. 定义关键词

1. 初步感觉 在机器人设置中定义了关键字后。 可以报警成功。

2. 不设置关键词的话,在 kibana 中,sentinl 点击开启按钮,提示成功 。但是钉钉内机器人也不告警。

3. 这一点 sentinl 做的并不是很好,现在 关于 sentinl 插件启动的log 日志还没有找到。 还无法查看各方面的原因。

4. 配置文件配置好后,点击执行按钮,打开开关即可。

5. 页面右下角会报执行成功。

6. 如果是 no data 则需要查看下log日志,以及配置文件

测试安装 7.6.1 版本的 elk 和 sentinl 插件,并能运行正常。备注: 7.6.1(预发行版本) sentinl 插件有问题,点击new没反应,无法创建Advanced,卸载重装也不行。查了资料,无解,看样子只能使用6.8.4版本【ELK 6.8.4+钉钉告警测试基本无问题】(已沟通过,换6.8.4)

1. 增量报警,报过的日志不要再提醒。(现通过在配置文件中设置时间设置阈值可以解决)

2. 查询 elk 使用curl + API命令自动创建索引。需要在服务器中写脚本和判断。

例:curl "API接口链接“ 在后面拼接 索引名+自己服务器的ip+报错日志+时间+ 字段名

这其中,可能有多个服务器,多种日志,例如php、mysql、nginx。等,一个服务器每天报3种类型的日志,则需要写脚本,需要每天自动创建索引。手动创建,则没有意义 (还在查资料)

2. 模拟生产环境,服务器生成3种log日志,php,mysql,nginx ,通过logstash配置文件按ip+日志类型+年份,按年推送到 kibana 中。

3. 新建一个服务器B,只配置 logstash ,看是否能推送到A服务器中。

4. 深入学习 ES curl 命令。

5. 查询统计结果,结果产生报表发送钉钉。查找接口或者写脚本看是否支持从 kibana 中把需要的筛选过的数据读取出来。(还没开始,评估了下,基本没可能。)

2021.02.06

不使用7.6.1版本后,改用6.8.4的ELK版本,提到的几个问题:

第一个增量报警,报过的日志不要再提醒。(现在可以通过配置文件中设置时间设置阈值可以解决);

第二个今天我模拟了生产环境,多个服务器上传日志,也可以上传;

第三个考虑到logstash服务器负载问题,正在测试另一个轻量级的数据收集插件;

第四个查询统计结果,报表发送钉钉。这个需要自己写脚本,暂时还没有搞

注意:如果启动不起来。报错。

Native controller process has stopped - no

看一下ip是否正确,以及配置文件中的ip也是否正常

# 启动 kibana

cd /etc/init.d

./kibana start

# 启动Logstash服务

设置服务自启动:systemctl enable logstash

启动服务:systemctl start logstash

停止服务:systemctl stop logstash

重启服务:systemctl restart logstash

查看服务状态:systemctl status logstash

配置:

input {

file {

path =>"/usr/log/error-log.log"

start_position => "beginning"

type =>"varnish"

}

file {

path =>"/usr/log/php-log.log"

start_position => "beginning"

type =>"php-log"

}

file {

path =>"/usr/log/nginx-log.log"

start_position => "beginning"

type =>"nginx-log"

}

}

output {

if[type] == "varnish"{

elasticsearch {

hosts =>["192.168.51.166:9200"]

index => "192.168.51.166-varnish-log"

}

}

if[type] == "php-log"{

elasticsearch {

hosts =>["192.168.51.166:9200"]

index => "192.168.51.166-php-log"

}

}

if[type] == "nginx-log"{

elasticsearch {

hosts =>["192.168.51.166:9200"]

index => "192.168.51.166-nginx-log"

}

}

}

# 启动 elasticsearch

cd /usr/local/elk/elasticsearch-6.8.4

./bin/elasticsearch

# 永久关闭防火墙

systemctl status firewalld.service

systemctl stop firewalld.service

systemctl disable firewalld.service

Filebeat 安装 使用

一、

# 通过 FTP 上传 安装包

# 解压

tar -xzf filebeat-6.8.4-linux-x86_64.tar.gz

二、

修改 A 服务器的 logstash.conf

原理:端口要相同,两台服务器能ping通。防火墙也要关闭。

通过在 B 服务器中的 yml 配置文件中,修改配置,添加标识。[fields][logsource]

在 A 服务器中的 logstash.conf 通过判断来接收 B 服务器 filebeat 传来的日志,并创建索引。

可根据日志类型 + ip + 时间,来创建索引分类。

例:

input {

beats {

port => 5044 # 此端口需要与 filebeat.yml 中的端口相同

}

}

output {

if [fields][logsource] == "nginx"{

elasticsearch {

hosts => ["192.168.51.166:9200"]

index => "nginx_log-222-%{+YYYY}"

}

}

if [fields][logsource] == "error"{

elasticsearch {

hosts => ["192.168.51.166:9200"]

index => "error_log-222-%{+YYYY}"

}

}

}

三、

要新建 yml配置文件

test.yml

filebeat.prospectors:

- type: log

enabled: true

paths:

- /usr/ee.log

fields:

logsource: error

output.logstash:

hosts: ["192.168.51.166:5044"]

注意:

1. 上面的 192.168.51.166:9200 是安装了 ELK 的 A 服务器 服务端。

2. 通过 test.yml 配置文件,是在 B 服务器的 filebeat 轻量级插件采集日志,推送给 A 服务器的 logstash ,由 A 服务器的 logstash 推给 A 的 ES ,最后通过 A 的 K 展示出来。

# 启动命令

./filebeat -e -c test.yml

elasticsearch-sql-6.8.4 安装步骤

进入到 elastsearch 目录中。

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/6.8.4.0/elasticsearch-sql-6.8.4.0.zip

ELK RPM 安装方式

# 注意。要先安装jdk

# 先安装 jdk1.8以上版本

yum install java-1.8.0-openjdk* -y

# 查看java版本

java -version

# 查找java的环境变量

which java

ls -lrt /usr/bin/java

ls -lrt /etc/alternatives/java

# 至此断定jdk安装路径为

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

vim   /etc/profile

# 在最后面加上:

export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

# 保存退出

source /etc/profile

# 验证

echo $JAVA_HOME

# 安装 和 升级 RPM 包

rpm -ivh elasticsearch-6.8.4.rpm

rpm -ivh kibana-6.8.4-x86_64.rpm

rpm -ivh logstash-6.8.4.rpm

rpm -ivh filebeat-6.8.4-x86_64.rpm

注意:不用安装jdk,因为rpm安装包已经集成了 jdk 环境

# 开放端口或永久关闭防火墙

elasticsearch 端口号 9200

kibana 端口号 5601

filebeat 端口号 5044

systemctl status firewalld.service

systemctl stop firewalld.service

systemctl disable firewalld.service

# elasticsearch启动:

systemctl start elasticsearch.service 启动

systemctl status elasticsearch.service 查看状态

systemctl stop elasticsearch.service 停止

或者浏览器访问 127.0.0.1:9200(未配置ip可用此方式)

# 查看服务的进程

ps -aux|grep elasticsearch

ps -aux|grep logstash

# 修改 es 配置文件

cd /etc/elasticsearch/

vim elasticsearch.yml

path,data是数据存储目录,路径要注意修改一下放置在内存大一点儿的目录下。

# 新建数据存储目录要注意,修改目录的所属权限和用户组

# 这里要注意切换为 root 用户

chown -R elasticsearch:elasticsearch elasticsearch

# 查看磁盘利用率。

df -h

# 启动Logstash服务

启动服务:systemctl start logstash

停止服务:systemctl stop logstash

重启服务:systemctl restart logstash

查看服务状态:systemctl status logstash

centos7 启动logstash失败 Failed to start logstash.service: Unit not found.

# 执行命令

sudo /usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd

在157 服务器上安装logstash 失败。添加一下命令 启动成功

/usr/share/logstash/bin/system-install /etc/logstash/startup.options sysv

# 修改 logstash 配置文件

cd /etc/logstash/

vim logstash.yml

path.data是数据存储目录,路径要注意修改一下放置在内存大一点儿的目录下。

# 启动 Kibana 服务

启动服务:systemctl start kibana

停止服务:systemctl stop kibana

重启服务:systemctl restart kibana

查看服务状态:systemctl status kibana

# 设置开机自启

systemctl enable elasticsearch.service

systemctl enable logstash

systemctl enable kibana

# sentinl 插件安装

cd /usr/share/kibana/bin

./kibana-plugin install file:///usr/local/elk/sentinl-v6.8.4.zip

# filebeat 安装

rpm -ivh filebeat-6.8.4-x86_64.rpm

vim /etc/filebeat/filebeat.yml

vim test.yml

可通过创建 test.yml 文件,加载不同的日志。

filebeat.prospectors:

- type: log

enabled: true

paths:

- /var/log/varnish/varnishncsa.log

fields:

logsource: varnish

- type: log

enabled: true

paths:

- /usr/local/nginx/logs/www.lzmei.com_access.log

fields:

logsource: nginx

output.logstash:

hosts: ["192.168.52.72:5044"]

1. filebeat 配置文件加载多个input

2. 完善filebeat安装步骤

3. sentinl 插件安装步骤

4. Filebeat 模块与配置

5. 插数据把字段分开插入,现在是都在一个message中 (难)

服务器配置静态ip

测试 yml 文件是否正确

filebeat setup -e

192.168.103.68 安装了 firewall

yum install firewalld

vim /etc/sysconfig/iptables

# 开启了5044 5601 9200 端口

firewall-cmd --zone=public --add-port=5044/tcp --permanent

firewall-cmd --zone=public --add-port=9200/tcp --permanent

firewall-cmd --zone=public --add-port=5601/tcp --permanent

# 重载

firewall-cmd --reload

# 指定了 47.52.169.157 访问这三个端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="47.52.169.157" port protocol="tcp" port="5044" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="47.52.169.157" port protocol="tcp" port="9200" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="47.52.169.157" port protocol="tcp" port="5601" accept"

# 删除 filebeat 的缓存

rm -f /var/lib/filebeat/registry

# 查看filebeat的启动日志

tail -f /var/log/filebeat/filebeat

157外网服务器日志推送至本地68服务器

# 端口映射

在68服务器所在的爱快路由后台,添加端口映射。

182.114.63.248 是该路由器对外的 ip 地址。

# 测试

telnet 182.114.63.248 5044

可以telnet 通。 证明可连接

# filebeat 配置文件要注意修改底部的hosts

这样。 日志从157服务器上采集到以后。推送给此ip的5044端口,我做了映射,只要从这个端口进来的。则可以访问我局域网的68服务器的 5044端口

#

/bin,它是重要的二进制应用程序,包含二进制文件,系统的所有用户使用的命令都在这里

/boot,启动包含引导加载程序的相关文件

/dev,包含设备文件,终端文件,USB 或者连接到系统的任何设备

/etc,配置文件,启动脚本等,包含所有程序所需要的配置文件,也包含了启动/停止单个应用程序的启动和关闭 shell 脚本

/home,本地主要路径,所有用户用 home 目录存储个人信息

/lib,系统库文件,包含支持位于 /bin 和 /sbin 下的二进制库文件

/lost+found,在根目录下提供一个遗失+查找系统,必须在 root 用户下才能查看当前目录下的内容

/media,挂载可移动介质

/mnt,挂载文件系统

/opt,提供一个可选的应用程序安装目录

/proc,特殊的动态目录,用于维护系统信息和状态,包括当前运行中进程信息

/root,root 用户的主要目录文件夹

/sbin,重要的二进制系统文件

/tmp, 系统和用户创建的临时文件,系统重启时,这个目录下的文件都会被删除

/usr,包含绝大多数用户都能访问的应用程序和文件

/var,经常变化的文件,诸如日志文件或数据库等

elk 删除过期数据,释放磁盘空间

- 1)delete_by_query设置检索近100天数据;

- 2)执行forcemerge操作,手动释放磁盘空间。

1. 最开始109.9kb 73 条数据 ,

2. 执行下面语句后依旧是 73 条数据, 110.5kb,

3. 增加了1条数据后,变为219.8kb 147条数据(73+74),

4. 证明删除规则已经生效。最开始的73条数据,已经记录在旧版本中,被标记成了删除,但空间却变为双倍,并没有释放,反而增加。

1. 命令删除

删除操作:lt 小于 保留7天内的数据。删除这个时间外的数据

查询操作:查询的是现在时间 - 7天之外的数据(除了1-7的7天数据之外)

POST /nginx_log-wangle-2021/_delete_by_query?conflicts=proceed

{

"query": {

"range": {

"@timestamp": {

"lt": "now-7d"

}

}

}

}

查询操作:gt 大于 查询的是7天内的数据量

删除操作:gt 大于 删除的是7天内的数据

GET /nginx_error-2021/_search

{

"query": {

"range": {

"@timestamp": {

"gt": "now-7d"

}

}

}

}

2. 物理删除

POST /nginx_log-wangle-2021/_forcemerge?only_expunge_deletes=true&max_num_segments=1

删除文档不会立即将文档从磁盘中删除,只是将其标记为已删除。随着您继续索引更多数据,Elasticsearch将在后台清理已删除的文档。

3. 删除给定条件下日志

POST /nginx_log-wangle-2021/_delete_by_query

{

"query": {

"match": {

"message": "/data/wwwroot/xxx/nginx.conf"

}

}

}

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王十一x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值