1.安装部署elasticsearch-7.3.0
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
上传到服务器 /opt/cjq
2.解压Elasticsearch
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
3.修改Elasticsearch的配置文件
cd elasticsearch-7.3.0/config/
vim elasticsearch.yml
4.修改配置文件(中文会引起报错,将中文部分删除即可)
# 如果需要部署集群,集群需要同样的集群名
cluster.name: cjq-application
# 每个node的名字需要唯一
node.name: cjq-1
# 注意一定要是路径后面加上/var/lib/elasticsearch/nodes,要不然无法加入集群,单机不需要
# path.data: /var/lib/elasticsearch/nodes
# path.logs: /var/log/elasticsearch
# 配置服务器的内网地址,有文档配置的0.0.0.0或localhost,但是后面出现了问题,暂未研究什么原因
network.host: 192.168.1.141
# 配置端口号,默认9200
http.port: 9200
# 配置集群节点,多个服务器["node-1", "node-2"]
cluster.initial_master_nodes: ["cjq-1"]
# discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
# 解决跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
5.启动Elasticsearch 需用elsearch用户启动
注意:启动时,不可以使用root用户。
# 创建elsearch组
groupadd elsearch
useradd elsearch(用户名) -g elsearch(组名) -p elsearch(密码)
# 给新创建用户文件夹执行权限
chown -R elsearch:elsearch /opt/cjq/elasticsearch-7.3.0
# 切换elsearch用户
su elsearch
6.启动ElasticSearch报错[1]: max file descriptors [4096] for elasticsearch process is too low
解决办法:
修改 etc/security/limits.conf
sudo vi /etc/security/limits.conf
在文件最后面加上
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
注:*后面有空格
修改 /etc/sysctl.conf
sudo vi /etc/sysctl.conf
在文件最后面加上
vm.max_map_count=262144
配置重新生效
sysctl -p
重新启动
进入/opt/cjq/elasticsearch-7.3.0/bin目录下执行
sh elasticsearch &
7.启动成功后,访问 http://192.168.1.141:9200/
{ "name" : "cjq-1", "cluster_name" : "cjq-application", "cluster_uuid" : "KdgE7GOpQoaMzyctiL4nnw", "version" : { "number" : "7.3.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "de777fa", "build_date" : "2019-07-24T18:30:11.767338Z", "build_snapshot" : false, "lucene_version" : "8.1.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
8.安装部署ElasticSearch的Head插件
注意:安装head需要安装node和npm 参考:https://www.cnblogs.com/bejamin/p/14439970.html
注意: 之前安装node最新版本(16.14.0)没法用,后改用(8.14.0)正常
注意: github官网无法访问或者下载很慢
hosts文件用ip配置github域名
#github ipconfig /flushdns
140.82.112.4 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
下载地址:https://github.com/mobz/elasticsearch-head.git
下载后执行:
unzip elasticsearch-head-master.zip
# 安装module
npm install
# 运行head插件 需用elsearch用户启动
npm run start &
访问界面 http://192.168.1.141:9100/
9.安装部署Logstash
下载Logstash
https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
解压Logstash
tar -zxvf logstash-7.3.0.tar.gz
要测试Logstash安装成功,运行最基本的Logstash管道。 执行以下的命令
./logstash -e 'input { stdin { } } output { stdout {} }'
然后在命令提示符下输入hello world,显示的如下:
hello world
{
"host" => "localhost.localdomain",
"@version" => "1",
"@timestamp" => 2022-02-14T09:50:46.954Z,
"message" => "hello world"
}
10.配置logstash输出到elasticsearch
cd logstash-7.3.0/config/
vim logstash-sample.conf
修改完配置如下:
input { beats { port => 5044 } tcp { port => 4569 codec => "json" } stdin{ } } filter { geoip { source => "x_forword_ip" target => "x_forword_geo" } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } useragent { source => "ngx_ua" target => "ua" } mutate { split => { "x_forword" => ", " } } mutate { rename => { "[host][name]" => "host" } } } output { elasticsearch { hosts => ["192.168.1.141:9200"] index => "cjq_index" codec => rubydebug } stdout { codec => rubydebug } }
更多配置参照官网教程:https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
可以参考该logstash手册:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/hello_world.html
控制台测试启动
./bin/logstash -f ./config/logstash-sample.conf
后台启动logstash -真正使用
nohup ./bin/logstash -f ./config/logstash-sample.conf &>nohup.log&
11.logstash结合filebeat使用
在分布式系统中,一台主机可能有多个应用,应用将日志输出到主机的指定目录,这时由logstash来搬运日志并解析日志,然后输出到elasticsearch上。由于于
logstash是java应用,解析日志是非常消耗cpu和内存,logstash安装在应用部署的机器上显得非常的笨重。最常见的做法是用filebeat部署在应用的机器上,logstash单独部署,然后由
filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。
下载filebeat,下载命令如下:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-linux-x86_64.tar.gz
tar -zxvf filebeat-7.3.0-linux-x86_64.tar.gz
cd /filebeat-7.3.0-linux-x86_64/
vim filebeat.yml修改配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/apphome/msdp-2.0/msdp-wk-biz.log
output.logstash:
hosts: ["192.168.1.141:5044"]
主要配置的是日志的搜集目录为/opt/apphome/msdp-2.0/msdp-wk-biz.log,这个目录是应用service输出日志的文件。输出到logstsh的地址为192.168.1.141
启动filebeat,执行以下命令:
sudo chown root filebeat.yml
sudo ./filebeat -e >filebeat.log 2>&1 &
这样日志就传输到了logstash, 然后通过logstash输出到elasticsearch
具体效果需要结合Kibana或者通过elasticsearch-head查看
12.SpringCloud + logstash结合logbak使用(暂时未使用)
此方式将通过tcp方式直接把日志输出到logstash服务器
在pom文件引用
<!--logback日志-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
在resources添加logbak的配置文件 logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<!-- 定义参数 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
<!-- 控制台打印设置 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- logstash设置 -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<param name="Encoding" value="UTF-8"/>
<!-- logstash服务器ip -->
<remoteHost>192.168.0.146</remoteHost>
<!-- logstash tcp 端口-->
<port>4569</port>
<!-- <filter class="com.program.interceptor.ELKFilter"/>-->//引入过滤类
<!-- encoder is required -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
<customFields>{"appname":"ceshi"}</customFields> // 索引名
</encoder>
</appender>
<root level="info">
<appender-ref ref="consoleAppender" />
<appender-ref ref="logstash"/>
</root>
</configuration>
其中{“appname”:“ceshi”} 对应logstash配置文件中的appname,为创建的索引名。
可以在Kibana索引管理中根据名称进行分区搜索。根据自己的需求来
编写测试方法:
@Slf4j
@RestController
public class TestController {
@RequestMapping(value = "/test")
public String test(String id) {
log.info("这是一个日志测试的controller");
return "这是一个日志测试的controller";
}
}
13.安装部署Kibana
下载Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz
解压Kibana
tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz
修改Kibana的配置文件
cd kibana-7.3.0/config/
vim kibana.yml
修改配置文件如下:
# 端口
server.port: 5601
# 指定本机ip让外部能访问
server.host: "0.0.0.0"
# 请求数据指向的elasticsearch服务器
elasticsearch.hosts: ["http://192.168.1.141:9200"]
配置完启动kibana,进入bin目录执行
sh kibana &
访问http://192.168.1.141:5601
查看通过logstash传输的日志列表
配置索引模式
查看日志
14.参考文献
https://blog.csdn.net/qq_34988304/article/details/100058049