1、下載安裝包
使用華為鏡像站下載速度很快,華為鏡像站:https://mirrors.huaweicloud.com/home
,下載時需要保證版本一致
2、安裝elasticsearch
解壓到當(dāng)前目錄
[root@localhost elk]# tar zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
安裝,將Elasticsearch移動到/opt目錄之中
[root@localhost elk]# mv elasticsearch-7.4.2 /opt
創(chuàng)建Elasticsearch用戶
es 規(guī)定 root 用戶不能啟動 es,所以需要新建一個其他用戶來啟動 es修改配置文件
添加用戶
[root@localhost elk]# adduser es
設(shè)定密碼
[root@localhost elk]# passwd es
添加權(quán)限
[root@localhost elk]# chown -R es /opt/elasticsearch-7.4.2
修改配置文件
進(jìn)入 /opt/elasticsearch-7.4.2/config/,修改elasticsearch.yml文件
[root@localhost ~]# cd /opt/elasticsearch-7.4.2/config/
取消如下注釋,并修改為當(dāng)前主機(jī)地址:
cluster.name: my-application
node.name: node-1
bootstrap.memory_lock: false
network.host: 192.168.75.143
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.75.143"]
discovery.zen.minimum_master_nodes: 1 #注意,因為本人目前是單節(jié)點,這里必須為1
新增如下配置:
transport.tcp.port: 9300
transport.tcp.compress: true
bootstrap.system_call_filter: false
使用vi編輯器,修改/etc/sysctl.conf文件,添加如下代碼(若無將會出現(xiàn)下面常見問題2):
vm.max_map_count=262144
退出保存后執(zhí)行如下命令:
sysctl -p
修改/etc/security/limits.conf文件,在文件末尾添加如下代碼(若無將會出現(xiàn)下面常見問題3):
# es為登錄服務(wù)器的用戶名
essoft nofile 65536
eshard nofile 65536
essoft nproc 4096
eshard nproc 4096
3、啟動Elasticsearch
切換用戶
su solin
查看當(dāng)前用戶
who am i
啟動服務(wù)
[es@localhost ~]$ /opt/elasticsearch-7.4.2/bin/elasticsearch
后臺啟動
[es@localhost ~]$ /opt/elasticsearch-7.4.2/bin/elasticsearch -d
測試是否啟動成功
[root@localhost ~]# curl 192.168.75.143:9200
報錯:需要按照J(rèn)AVA11
future versions of Elasticsearch will require Java 11; your Java version from [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre] does not meet this requirement
選擇11版本
[es@localhost ~]$ yum search java| grep jdk
[root@localhost elk]# yum install java-11-openjdk-devel.x86_64
java環(huán)境配置參考:https://www.voidking.com/dev-install-jdk-on-all-platforms/
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
報錯2:
could not find java in JAVA_HOME or bundled at /usr/lib/jvm/java-1.8.0/bin/java
解決辦法:
切換到普通用戶es下,執(zhí)行source /etc/profile
刷新配置
報錯3:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
警告信息不影響es的啟動,如果要去掉警告,則需要修改es config下面的jvm.options文件中的屬性定義字段,把-XX:+UseConcMarkSweepGC
修改成:
[root@localhost config]# vim jvm.options
-XX:+UseG1GC
設(shè)置允許其他機(jī)器訪問
當(dāng)前只能響應(yīng)本機(jī)的請求,想要其他機(jī)器也能訪問的話,那么需要修改elasticsearch的配置。
[root@localhost ~]# vim /opt/elasticsearch-7.4.2/config/elasticsearch.yml
# line 17, uncomment
cluster.name: my-application
# line 22, uncomment and change
node.name: master
# line 55, uncomment and change
network.host: 0.0.0.0
# line 59, uncomment
ttp.port: 9200
# line 72, uncomment and change
cluster.initial_master_nodes: ["master", "node-2"]
重啟Elasticsearch
如果可以看到:::9200,就可以通過外部瀏覽器訪問Elasticsearch服務(wù)了,至此Elasticsearch安裝配置完成。
4、Logstash安裝
Logstash 工作原理
Logstash使用管道方式進(jìn)行日志的搜集處理和輸出。
有點類似Linux系統(tǒng)的管道命令 aaa| bbb | ccc,aaa執(zhí)行完了會執(zhí)行bbb,然后執(zhí)行ccc。
在logstash中,包括了三個階段:
輸入input --> 處理filter(不是必須的) --> 輸出output
配置文件也是按這個順序進(jìn)行配置的。
解壓安裝包到當(dāng)前目錄
[root@localhost elk]# tar zxvf logstash-7.4.2.tar.gz
移動安裝目錄到opt目錄下
[root@localhost elk]# mv logstash-7.4.2 /opt
拷貝 config 目錄下的 logstash-sample.conf,改名為 logstash.conf,修改其配置,內(nèi)容如下:
簡單解釋一下這段配置:
1、input
塊是 logstash 接收日志時的一些配置,output
是 logstash 往 elasticsearch 輸送日志的配置;
2、input.host
是運行 logstash 的服務(wù)器的 ip;input.port
是 logstash 的運行端口,可以自己定義;
3、output.hosts
的 elasticsearch 的 ip 和端口,這是個數(shù)組,多個用逗號隔開,由于我們沒有修改 elasticsearch 的配置,它默認(rèn)就是 9200 端口;output.index
是索引;
4、修改完配置,進(jìn)入 bin 目錄指定配置文件啟動即可,例如:./logstash -f ../config/logstash.conf
,如果是 windows 版本,執(zhí)行l(wèi)ogstash.bat -f …/config/logstash.conf即可。
[root@localhost bin]# ./logstash -f ../config/logstash.conf
5、kibana安裝
下載后解壓,然后拷貝一份 config 目錄下的 kibana.yml,根據(jù)自己的需要可以修改配置,比如端口(默認(rèn)5601)、host、elasticsearch.hosts(默認(rèn)localhost:9200)等。我這里都用默認(rèn)的,沒有修改。
到 bin 目錄下執(zhí)行 ./kibana就可以啟動了,windows 執(zhí)行 kibana.bat即可。
啟動完訪問 localhost:5601,看到如下界面就啟動成功了。
kibana.yml配置文件常用配置說明
server.port:
默認(rèn)值: 5601 Kibana 由后端服務(wù)器提供服務(wù),該配置指定使用的端口號。
server.host:
默認(rèn)值: "localhost" 指定后端服務(wù)器的主機(jī)地址。
server.basePath:
如果啟用了代理,指定 Kibana 的路徑,該配置項只影響 Kibana 生成的 URLs,轉(zhuǎn)發(fā)請求到 Kibana 時代理會移除基礎(chǔ)路徑值,該配置項不能以斜杠 (/)結(jié)尾。
server.maxPayloadBytes:
默認(rèn)值: 1048576 服務(wù)器請求的最大負(fù)載,單位字節(jié)。
server.name:
默認(rèn)值: "您的主機(jī)名" Kibana 實例對外展示的名稱。
server.defaultRoute:
默認(rèn)值: "/app/kibana" Kibana 的默認(rèn)路徑,該配置項可改變 Kibana 的登錄頁面。
elasticsearch.url:
默認(rèn)值: "http://localhost:9200" 用來處理所有查詢的 Elasticsearch 實例的 URL 。
elasticsearch.preserveHost:
默認(rèn)值: true 該設(shè)置項的值為 true 時,Kibana 使用 server.host 設(shè)定的主機(jī)名,該設(shè)置項的值為 false 時,Kibana 使用主機(jī)的主機(jī)名來連接 Kibana 實例。
kibana.index:
默認(rèn)值: ".kibana" Kibana 使用 Elasticsearch 中的索引來存儲保存的檢索,可視化控件以及儀表板。如果沒有索引,Kibana 會創(chuàng)建一個新的索引。
kibana.defaultAppId:
默認(rèn)值: "discover" 默認(rèn)加載的應(yīng)用。
tilemap.url:
Kibana 用來在 tile 地圖可視化組件中展示地圖服務(wù)的 URL。默認(rèn)時,Kibana 從外部的元數(shù)據(jù)服務(wù)讀取 url,用戶也可以覆蓋該參數(shù),使用自己的 tile 地圖服務(wù)。例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"
tilemap.options.minZoom:
默認(rèn)值: 1 最小縮放級別。
tilemap.options.maxZoom:
默認(rèn)值: 10 最大縮放級別。
tilemap.options.attribution:
默認(rèn)值: "? [Elastic Tile Service](https://www.elastic.co/elastic-tile-service)" 地圖屬性字符串。
tilemap.options.subdomains:
服務(wù)使用的二級域名列表,用 {s} 指定二級域名的 URL 地址。
elasticsearch.username: 和 elasticsearch.password:
Elasticsearch 設(shè)置了基本的權(quán)限認(rèn)證,該配置項提供了用戶名和密碼,用于 Kibana 啟動時維護(hù)索引。Kibana 用戶仍需要 Elasticsearch 由 Kibana 服務(wù)端代理的認(rèn)證。
server.ssl.enabled
默認(rèn)值: "false" 對到瀏覽器端的請求啟用 SSL,設(shè)為 true 時, server.ssl.certificate 和 server.ssl.key 也要設(shè)置。
server.ssl.certificate: 和 server.ssl.key:
PEM 格式 SSL 證書和 SSL 密鑰文件的路徑。
server.ssl.keyPassphrase
解密私鑰的口令,該設(shè)置項可選,因為密鑰可能沒有加密。
server.ssl.certificateAuthorities
可信任 PEM 編碼的證書文件路徑列表。
server.ssl.supportedProtocols
默認(rèn)值: TLSv1、TLSv1.1、TLSv1.2 版本支持的協(xié)議,有效的協(xié)議類型: TLSv1 、 TLSv1.1 、 TLSv1.2 。
server.ssl.cipherSuites
默認(rèn)值: ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-GCM-SHA384, DHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, DHE-RSA-AES128-SHA256, ECDHE-RSA-AES256-SHA384, DHE-RSA-AES256-SHA384, ECDHE-RSA-AES256-SHA256, DHE-RSA-AES256-SHA256, HIGH,!aNULL, !eNULL, !EXPORT, !DES, !RC4, !MD5, !PSK, !SRP, !CAMELLIA. 具體格式和有效參數(shù)可通過[OpenSSL cipher list format documentation](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html#CIPHER-LIST-FORMAT) 獲得。
elasticsearch.ssl.certificate: 和 elasticsearch.ssl.key:
可選配置項,提供 PEM格式 SSL 證書和密鑰文件的路徑。這些文件確保 Elasticsearch 后端使用同樣的密鑰文件。
elasticsearch.ssl.keyPassphrase
解密私鑰的口令,該設(shè)置項可選,因為密鑰可能沒有加密。
elasticsearch.ssl.certificateAuthorities:
指定用于 Elasticsearch 實例的 PEM 證書文件路徑。
elasticsearch.ssl.verificationMode:
默認(rèn)值: full 控制證書的認(rèn)證,可用的值有 none 、 certificate 、 full 。 full 執(zhí)行主機(jī)名驗證,certificate 不執(zhí)行主機(jī)名驗證。
elasticsearch.pingTimeout:
默認(rèn)值: elasticsearch.requestTimeout setting 的值,等待 Elasticsearch 的響應(yīng)時間。
elasticsearch.requestTimeout:
默認(rèn)值: 30000 等待后端或 Elasticsearch 的響應(yīng)時間,單位微秒,該值必須為正整數(shù)。
elasticsearch.requestHeadersWhitelist:
默認(rèn)值: [ 'authorization' ] Kibana 客戶端發(fā)送到 Elasticsearch 頭體,發(fā)送 no 頭體,設(shè)置該值為[]。
elasticsearch.customHeaders:
默認(rèn)值: {} 發(fā)往 Elasticsearch的頭體和值, 不管 elasticsearch.requestHeadersWhitelist 如何配置,任何自定義的頭體不會被客戶端頭體覆蓋。
elasticsearch.shardTimeout:
默認(rèn)值: 0 Elasticsearch 等待分片響應(yīng)時間,單位微秒,0即禁用。
elasticsearch.startupTimeout:
默認(rèn)值: 5000 Kibana 啟動時等待 Elasticsearch 的時間,單位微秒。
pid.file:
指定 Kibana 的進(jìn)程 ID 文件的路徑。
logging.dest:
默認(rèn)值: stdout 指定 Kibana 日志輸出的文件。
logging.silent:
默認(rèn)值: false 該值設(shè)為 true 時,禁止所有日志輸出。
logging.quiet:
默認(rèn)值: false 該值設(shè)為 true 時,禁止除錯誤信息除外的所有日志輸出。
logging.verbose
默認(rèn)值: false 該值設(shè)為 true 時,記下所有事件包括系統(tǒng)使用信息和所有請求的日志。
ops.interval
默認(rèn)值: 5000 設(shè)置系統(tǒng)和進(jìn)程取樣間隔,單位微妙,最小值100。
status.allowAnonymous
默認(rèn)值: false 如果啟用了權(quán)限,該項設(shè)置為 true 即允許所有非授權(quán)用戶訪問 Kibana 服務(wù)端 API 和狀態(tài)頁面。
cpu.cgroup.path.override
如果掛載點跟 /proc/self/cgroup 不一致,覆蓋 cgroup cpu 路徑。
cpuacct.cgroup.path.override
如果掛載點跟 /proc/self/cgroup 不一致,覆蓋 cgroup cpuacct 路徑。
console.enabled
默認(rèn)值: true 設(shè)為 false 來禁用控制臺,切換該值后服務(wù)端下次啟動時會重新生成資源文件,因此會導(dǎo)致頁面服務(wù)有點延遲。
elasticsearch.tribe.url:
Elasticsearch tribe 實例的 URL,用于所有查詢。
elasticsearch.tribe.username: 和 elasticsearch.tribe.password:
Elasticsearch 設(shè)置了基本的權(quán)限認(rèn)證,該配置項提供了用戶名和密碼,用于 Kibana 啟動時維護(hù)索引。Kibana 用戶仍需要 Elasticsearch 由 Kibana 服務(wù)端代理的認(rèn)證。
elasticsearch.tribe.ssl.certificate: 和 elasticsearch.tribe.ssl.key:
可選配置項,提供 PEM 格式 SSL 證書和密鑰文件的路徑。這些文件確保 Elasticsearch 后端使用同樣的密鑰文件。
elasticsearch.tribe.ssl.keyPassphrase
解密私鑰的口令,該設(shè)置項可選,因為密鑰可能沒有加密。
elasticsearch.tribe.ssl.certificateAuthorities:
指定用于 Elasticsearch tribe 實例的 PEM 證書文件路徑。
elasticsearch.tribe.ssl.verificationMode:
默認(rèn)值: full 控制證書的認(rèn)證,可用的值有 none 、 certificate 、 full 。 full 執(zhí)行主機(jī)名驗證, certificate 不執(zhí)行主機(jī)名驗證。
elasticsearch.tribe.pingTimeout:
默認(rèn)值: elasticsearch.tribe.requestTimeout setting 的值,等待 Elasticsearch 的響應(yīng)時間。
elasticsearch.tribe.requestTimeout:
Default: 30000 等待后端或 Elasticsearch 的響應(yīng)時間,單位微秒,該值必須為正整數(shù)。
elasticsearch.tribe.requestHeadersWhitelist:
默認(rèn)值: [ 'authorization' ] Kibana 發(fā)往 Elasticsearch 的客戶端頭體,發(fā)送 no 頭體,設(shè)置該值為[]。
elasticsearch.tribe.customHeaders:
默認(rèn)值: {} 發(fā)往 Elasticsearch的頭體和值,不管 elasticsearch.tribe.requestHeadersWhitelist 如何配置,任何自定義的頭體不會被客戶端頭體覆蓋。
報錯1:
FATAL [master_not_discovered_exception] null :: {"path":"/.kibana_task_manager","query":{},"statusCode":503,"response":"{\"error\":{\"root_cause\":[{\"type\":\"master_not_discovered_exception\",\"reason\":null}],\"type\":\"master_not_discovered_exception\",\"reason\":null},\"status\":503}"}
原因:未修改elasticsearch.yml的cluster.initial_master_nodes配置,修改配置之后重啟elasticsearch
node.name: node-1
cluster.initial_master_nodes: [“node-1”]
報錯2:Request Timeout after 30000ms
解決辦法 :
方法1、修改elastisearch的內(nèi)存
方法2、修改kibana的超時時間
如果機(jī)器的內(nèi)存不是那么的充足的話,我們可以改改后端彈性搜索的閾值。修改配置文件/etc/kibana/kibana.yml的第66行,將#去掉,然后將30000毫秒(也就是30s)
更改成40000(40秒),這個根據(jù)實際情況進(jìn)行修改。
報錯3:
fs.js:115
throw err;
^
Error: EACCES: permission denied, open '/opt/kibana-7.4.2-linux-x86_64/optimize/.babel_register_cache.json'
at Object.openSync (fs.js:439:3)
at Object.writeFileSync (fs.js:1190:35)
at save (/opt/kibana-7.4.2-linux-x86_64/node_modules/@babel/register/lib/cache.js:52:15)
at process._tickCallback (internal/process/next_tick.js:61:11)
at Function.Module.runMain (internal/modules/cjs/loader.js:745:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
解決辦法:賦予普通用戶文件權(quán)限
chown -R kibana /opt/kibana-7.4.2-linux-x86_64/optimize/.babel_register_cache.json
在kibana中查詢?nèi)罩?/p>
訪問localhost:5601,點擊左側(cè)最下方圖標(biāo)【Management】–> 【Index Patterns】–> 【Create index pattern】
6、logstash深入收集Nginx日志
安裝nginx
[root@localhost nginx]# yum -y install nginx
echo "192.168.75.143" > /usr/share/nginx/html/index.html
住nginx.conf配置
[root@localhost nginx]# cat nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';
#access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.log access_json;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
將Nginx日志轉(zhuǎn)換成json格式
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';
access_log /var/log/nginx/access.log access_json;
重啟nginx,查看訪問日志
刷新頁面會在日志看到訪問日志信息為json格式即可,配置logstash收集Nginx日志
[root@localhost config]# cat nginx-log-es.conf
input{
file{
path => "/var/log/nginx/access.log"
start_position => "beginning"
stat_interval => 3
type => "nginx-accesslog"
codec => "json"
}
}
output{
if [type] == "nginx-accesslog"{
elasticsearch {
hosts => ["192.168.75.143:9200"]
index => "long-nginx-accesslog-%{+YYYY.MM.dd}"
}}
}
檢查語法
/opt/logstash-7.4.2/bin/logstash -f /opt/logstash-7.4.2/config/nginx-log-es.conf -t
啟動文章來源:http://www.zghlxwxcb.cn/news/detail-642585.html
/opt/logstash-7.4.2/bin/logstash -f /opt/logstash-7.4.2/config/nginx-log-es.conf
查看kabana
把nginx的訪問日志和錯誤日志一起收集,配置文件
[root@localhost config]# cat nginx-log-es.conf
input{
file{
path => "/var/log/nginx/access.log"
start_position => "beginning"
stat_interval => 3
type => "nginx-accesslog"
codec => "json"
}
file{
path => "/var/log/nginx/error.log"
start_position => "beginning"
stat_interval => 3
type => "nginx-errorlog"
#codec => "json"
}
}
output{
if [type] == "nginx-accesslog"{
elasticsearch {
hosts => ["192.168.75.143:9200"]
index => "long-nginx-accesslog-%{+YYYY.MM.dd}"
}}
if [type] == "nginx-errorlog"{
elasticsearch {
hosts => ["192.168.75.143:9200"]
index => "long-nginx-errorlog-%{+YYYY.MM.dd}"
}}
}
檢查語法
/opt/logstash-7.4.2/bin/logstash -f /opt/logstash-7.4.2/config/nginx-log-es.conf -t
啟動
/opt/logstash-7.4.2/bin/logstash -f /opt/logstash-7.4.2/config/nginx-log-es.conf
查看錯誤日志文章來源地址http://www.zghlxwxcb.cn/news/detail-642585.html
到了這里,關(guān)于centos7 搭建ELK(elasticsearch、logstash、kibana)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!