Health check properties for springboot application in PCF - spring-boot

I have configured the below health check properties in my spring boot application(using actuator) and returning "UP" when locally tested using the below endpoint
server:
servlet:
context-path: /account/v1
port: 8443
management:
endpoints:
web:
path-mapping:
health: /health
Check locally using "http://localhost:8443/account/v1/actuator/health and returning
{"status":"UP"}"
In PCF I updated the Health check type as "http" and Endpoint as "/actuator/health".
When I pushed my app I am getting the below error
2020-09-02T12:43:15.92+0530 [HEALTH/0] ERR Failed to make HTTP request to '/actuator/health' on port 8080: connection refused
2020-09-02T12:43:15.92+0530 [CELL/0] ERR Failed after 1m0.632s: readiness health check never passed.
Please help on this.(Is my port or endpoint wrong)

Related

Error on executing http rest by the gateway 502

I'm working on a spring cloud application
<!-- config boot & cloud -->
<spring-boot.version>2.7.7</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
I'm blocked on a http error 502 (proxy error) you will find the logs below.
When my http call exceeds 5 minutes my gateway return 502 to my Angular client - and the the back-end continue the treatment there is no error on back-end -
Gecko/20100101 Firefox/102.0" "172.17.10.67:46630" "172.17.0.79:61077"
x_forwarded_for:"10.195.209.56, 172.17.0.78, 172.17.10.67"
x_forwarded_proto:"https,https" vcap_request_id:"ff220ed6-266d-435d-5871-58f67d80c1d9"
response_time:300.005213 gorouter_time:0.000213 app_id:"4aa32d01-bbbe-4876-bed8-6256524bbd2e"
app_index:"0" instance_id:"cbe8ded1-e8d4-4a5f-7ab0-f75b" x_cf_routererror:"endpoint_failure (context canceled)"
x_b3_traceid:"4184c84b0c60d6a03fc900b8969f3e97" x_b3_spanid:"3fc900b8969f3e97" x_b3_parentspanid:"-"
b3:"4184c84b0c60d6a03fc900b8969f3e97-3fc900b8969f3e97"
I tried this configuration but it not resolve the error timeout
(this configuration resolve the timeout error http 504 and not 502)
spring:
cloud:
gateway:
httpclient:
connect-timeout: 60000
response-timeout: 600s
I tried the configuration by route also it gives no result.

Spring cloud client trying to run on server port 8888

The config server is up and the client is able to fetch the properties from config server.
HTTP GET http://localhost:8888/account-service/dev/config
Accept=[application/json, application/*+json]
Response 200 OK
But the problem is, client service is trying to start on config server port 8888. I have set server.port=8080 in the client but still not working.
***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8888 was already in use.
Am I missing any configuration here? Highly appreciate any help.
Config server application.properties,
spring.application.name=config-server
spring.cloud.config.profiles=dev
spring.cloud.config.server.git.uri=REPO_URL
server.port=8888
Finally, I was able to find the solution. When I was trying to start client service, server.port was also getting overridden with config server port. I added server.port=8080 in the properties file for the client service profile in config repo (account-service.properties) and it worked.

actuator port in >= Spring Boot 2.3.4

Is it still possible to change the actuator port in 2.3.4?
neither management.port nor management.endpoints.port seems to work. Intellij doesn't recognize any of these settings, either.
It is management.server.port. Customizing the Management Server Port
With these settings:
server:
port: 8082
management:
server:
port: 8081
the default app port is 8082 and the actuator data is exposed at 8081

Eureka Client: Eureka Registry server address alternative to 'localhost'

Eureka-server(MediaStoreEurekaServer): bootstrap.properties
spring.application.name=MediaStoreEurekaServer
server.port=9091
eureka.client.serviceUrl.defaultZone=http://localhost:9091/eureka}
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
Eureka-client(Config-Server): bootstrap.properties
spring.application.name=Config-Server
server.port=9093
user.home=${HOME}
spring.cloud.config.server.native.search-locations=file://${user.home}/IdeaProjects/MediaStore/centralProperties
spring.profiles.active=native
eureka.client.serviceUrl.defaultZone=http://localhost:9091/eureka
With above 2 properties (services running on same machine), Config-Server is able to register with MediaStoreEurekaServer eureka registry server when using http://localhost:9091/eureka.
I don't want to use localhost. When I use http://MediaStoreEurekaServer:9091/eureka , Config-Server is not able to register.
Can we use something other than localhost for eureka client to find the eureka server like service or instance name? when services are running on same host
Edit 1:
This is what eureka client spring logs give when in eureka client properties file i set
eureka.client.serviceUrl.defaultZone=http://MediaStoreEurekaServer:9091/eureka
Error:
2020-05-22 20:01:02.137 ERROR 22846 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error. endpoint=DefaultEndpoint{ serviceUrl='http://MediaStoreEurekaServer:9091/eureka/}
com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: MediaStoreEurekaServer```

Zuul Forwarding error - Trying to connect to a different(unknown) ip

I have configured zuul proxy and eureka naming server for my spring boot application. Zuul proxy run on port 8765 and eureka runs on port 8761.
Also two other microservices, user-service and message-service run on port 8081 and 8082.
Also I have used swagger for the zuul proxy service where i can find all microservices api in one place.
Swagger configuration in Zuul proxy service
#Component
#Primary
#EnableAutoConfiguration
public class Controller implements SwaggerResourcesProvider{
#Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources= new ArrayList<>();
SwaggerResource user = new SwaggerResource();
user.setName("USER-SERVICE");
user.setLocation("/api/user/v2/api-docs");
user.setSwaggerVersion("2.0");
resources.add(user);
SwaggerResource message = new SwaggerResource();
message.setName("MESSAGE-SERVICE");
message.setLocation("/api/message/v2/api-docs");
message.setSwaggerVersion("2.0");
resources.add(message);
return resources;
}
}
application.yml of Zuul proxy
server:
port: 8765
eureka:
client:
serviceUrl:
defaultZone: http://eureka-naming-server:8761/eureka/
instance:
prefer-ip-address: true
metadataMap:
instanceId: ${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${random.value}}}
instanceId: ${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${random.value}}}
zuul:
prefix: /api
sensitive-headers: Cookie,Set-Cookie
routes:
user-service:
path: /user/**
service-id: USER-SERVICE
message-service:
path: /message/**
service-id: MESSAGE-SERVICE
Also i have used docker-compose file to up the docker microservices with default subnet (169.254.3.0/24).
ip address of user-service is 169.254.3.6
ip address of message-service is 169.254.3.10
Here is the issue
When I call these services via zuul proxy swgger ui, often i am getting 500 error. That for the first time i hit the specific url it throws 500 error.
but after few attempt i get the response.
Zuul log which indicate problem
com.netflix.zuul.exception.ZuulException: Forwarding error
...
Caused by: com.netflix.client.ClientException: null
...
Caused by: java.lang.RuntimeException: org.apache.http.conn.ConnectTimeoutException: Connect to 172.22.97.14:8081 [/172.22.97.14] failed: connect timed out
...
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to 172.22.97.14:8081 [/172.22.97.14] failed: connect timed out
...
Caused by: java.net.SocketTimeoutException: connect timed out
I have no idea about 172.22.97.14:8081, why is not try to connect 172.22.97.14:8081 instead of connect to 169.254.3.6:8081
Can someone help me to understand what is happening in here..
Any help would be grateful !
[Edit]
zuul proxy container ip is 169.254.3.10
This problem occured on my project when I was using the same Zuulserver for developing microservices on localhost and DEV environment (when I started microservis on localhost it connected to zullserver on DEV env.). Then when I tried to call some operation through zuulserver it tried to connect to microservis not on DEV env. but on my machine.
I suspect the same problem on your side and IP on which you are developing your application is 172.22.97.14:8081.

Resources